编译具有不同java源兼容性的项目

时间:2013-08-12 15:12:34

标签: gradle build.gradle

我有一个包含3个不同项目的多项目配置。

其中2个项目依赖于第3个项目,我将其命名为“核心”。 根据项目的不同,“核心”必须编译为jar,源分别为1.4和1.6,分别为输出core-1.4.jar和core-1.6.jar。

是否可以使用单个build.gradle执行此操作,或者执行此操作的最佳方法是什么?如何为两个项目中的每一个指定依赖项中特定的jar?

1 个答案:

答案 0 :(得分:12)

问题基本上是关于如何生成和使用基于相同Java代码的工件的两种变体。如果你真的需要生成两个只有目标兼容性不同的Jars(我首先要问的话),实现这一点的一种方法是使用Java插件的main源集(以及随之而来的任务)它)产生第一个变化,并产生新的源集以产生第二个变化。此外,第二个变体需要通过自己的配置发布,以便依赖项目可以引用它。这看起来如下:

芯/的build.gradle:

apply plugin: "java"

sourceCompatibility = 1.4

sourceSets {
    main1_4 {
        def main = sourceSets.main
        java.srcDirs = main.java.srcDirs
        resources.srcDirs = main.resources.srcDirs
        compileClasspath = main.compileClasspath
        runtimeClasspath = main.runtimeClasspath
    }
}

compileJava {
    targetCompatibility = 1.6
}

compileMain1_4Java {
    targetCompatibility = 1.4    
}

jar {
    archiveName = "core-1.6.jar"
}

main1_4Jar {
    archiveName = "core-1.4.jar"
}

configurations {
    archives1_4
}

artifacts {
    archives1_4 main1_4Jar
}

在依赖项目中:

dependencies {
    compile project(":core") // depend on 1.6 version
    compile project(path: ":core", configuration: "archives1_4") // depend on 1.4 version
}

所有这些都可以(但不是必须)在同一个构建脚本中完成。有关详细信息,请参阅Gradle User Guide中的“多项目构建”一章。