【问题标题】:Compiling a project with different java source compatibility编译具有不同java源兼容性的项目
【发布时间】:2013-08-13 23:28:59
【问题描述】:

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

其中 2 个项目依赖于我将其命名为“核心”的第三个项目。 根据项目的不同,'core' 必须编译成一个 jar,分别与 1.4 和 1.6 的源代码兼容性,输出 core-1.4.jar 和 core-1.6.jar。

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

【问题讨论】:

  • 是的,目标兼容性也是如此。我已经尝试过: sourceCompatibility = 1.4 targetCompatibility = 1.4 在任务中,但这不起作用。目标之一是 Java ME,另一个是 Android。
  • 究竟是什么不起作用?

标签: gradle build.gradle


【解决方案1】:

问题基本上是关于如何生成和使用基于相同 Java 代码的工件的两种变体。如果您确实需要生成两个仅在目标兼容性方面有所不同的罐子(我首先会提出问题),实现此目的的一种方法是使用 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 中的“多项目构建”一章。

【讨论】:

  • 谢谢。我之前的问题是我设置了compileClasspath = ,它从路径中删除了核心项目的jar。改成它 += 解决了问题。
  • 刚刚意识到我需要彻底修改我的答案。现在应该更接近真相了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多