【问题标题】:Gradle compile and jar a subset of java classesGradle 编译并 jar 一个 java 类的子集
【发布时间】:2013-12-10 07:49:58
【问题描述】:

我想编译(使用不同的 targetCompatibility 和 sourceCompatibility)并 jar 整个 main/src/java 文件夹的一小部分。

所以我有例如

main/src/java/com/interface/A.java
main/src/java/com/interface/B.java
main/src/java/com/logic/C.java

我想将 A 和 B 编译成一个 jar “projectname_projectversion_interface.jar”并使用不同的编译器版本。

这可能吗?我怎样才能做到这一点?

谢谢

【问题讨论】:

    标签: gradle


    【解决方案1】:

    我建议使用单独的源集:

    apply plugin: "java"
    
    sourceSets {
        main {
            java {
                exclude "com/interface/A.java"
                exclude "com/interface/B.java"
            }
        }
        api {
            java {
                srcDir "src/main/java"
                include "com/interface/A.java"
                include "com/interface/B.java"
            }
        }
    }
    

    如果main 依赖于api,添加类似:

    sourceSets.main.compileClasspath += sourceSets.api.output
    

    可以在编译任务级别调整源/目标兼容性:

    compileApiJava {
        sourceCompatibility = "1.7"
        targetCompatibility = "1.7"
    }
    

    要使用除运行 Gradle 本身的 JDK 之外的编译器,您必须设置编译器可执行文件:

    compileApiJava {
        options.fork = true
        options.forkOptions.executable = "/path/to/compiler/executable"
    }
    

    这可能会在一定程度上减慢构建速度。

    如需更多 API 详情,请查看Gradle Build Language Reference

    【讨论】:

    • 我添加了这个:task jarApi(type: Jar) {dependOn compileApiJava from sourceSets.api.output classifier = 'api' } task sourcesApiJar(type: Jar, dependsOn: apiClasses) { classifier = 'api -sources' 来自 sourceSets.api.allSource }
    • 对了,我忘了 Jar 任务不会为每个源集自动添加。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-18
    • 2014-06-28
    • 1970-01-01
    • 1970-01-01
    • 2014-06-20
    • 1970-01-01
    • 2014-10-08
    相关资源
    最近更新 更多