栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java 条件编译

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java 条件编译

java 条件编译 方式1. 使用if条件编译

原理:jvm 会对if(false)中的代码做优化:

例如:

    public static void main(String[] args) {
        if(false){
            System.out.println("hello world");
        }
        System.out.println("main");
    }

编译之后的源码:

    public static void main(String[] args) {
        System.out.println("main");
    }

基于上述原理,可以通过动态的修改变脸的值达到条件编译的目的;

方式2:manifold预编译

使用说明:
http://manifold.systems/docs.html#setup

1. 下载idea插件 Manifold

项目本身是开源免费的,但是插件是收费的,10天免费试用期
插件费用:$19.9/M -> $199/Y $159/2nd year
参考文档:manifold-preprocessor

2. 修改maven配置信息
    
        
        2021.1.34
    
    
        
            systems.manifold
            manifold-ext-rt
            ${manifold.version}
        
    

    
        
         
            
                org.apache.maven.plugins
                maven-compiler-plugin
                3.8.0
                
                    8
                    8
                    UTF-8
                    
                        
                        -Xplugin:Manifold
                    
                    
                    
                        
                            systems.manifold
                            manifold-preprocessor
                            ${manifold.version}
                        
                    
                
            
        
    

编写测试类:

#define MY_API_1

#if MY_API_1
import java.util.Date;
#else
    import java.time.LocalDateTime;
#endif

public class ServiceManifold #if MY_API_2 implements Serializable #endif {
    #if MY_API_1
    public void setDate(Date date) {
        System.out.println(date);
    }
    #elif MY_API_2
        public void setDate(LocalDateTime date){
            System.out.println(date);
        }
    #endif
}

使用maven编译,生成之后的java代码:

package com.jd.gxf.gfkj.qrcode.service;

import java.util.Date;

public class ServiceManifold {
    public ServiceManifold() {
    }

    public void setDate(Date date) {
        System.out.println(date);
    }
}

当启用 MY_API_2之后,编译的源码如下:

package com.jd.gxf.gfkj.qrcode.service;

import java.io.Serializable;
import java.time.LocalDateTime;

public class ServiceManifold implements Serializable {
    public ServiceManifold() {
    }

    public void setDate(LocalDateTime date) {
        System.out.println(date);
    }
}
参考资料:
    1. java-conditional-compilation
    1. java-comment-preprocessor
    1. manifold
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/666488.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号