如何在jar中包含子项目类?

K. *_* D. 3 java gradle

经过几个小时的研究和尝试,我希望有人可以解释我们如何让Gradle包括一个或多个子项目的类到特定的jar中.

可以说我们只有三个模块

  1. 核心
  2. 应用
  3. 卷筒纸

显然App,Web项目工件(jars)应该包含Core项目中的所有类.

设置gradle:

rootProject.name = 'MyProject'
include 'MyProjectCore'
include 'MyProjectApp'
include 'MyProjectWeb'
Run Code Online (Sandbox Code Playgroud)

MyProjectApp/MyProjectWeb:

...
dependencies {
    ...
    compile project(':MyProjectCore')
}
Run Code Online (Sandbox Code Playgroud)

可以编译项目,但输出jar不包含核心类.

K. *_* D. 5

好吧,最后我找到了一个可行的解决方案,即使它可能不是最好的.

对于AppWeb项目,我覆盖这样的jar任务来添加Core模块的源集.

jar {
    from project.sourceSets.main.allSource
    from project(":MyProjectCore").sourceSets.main.java.srcDirs
}
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,这是我在 https://rominirani.com/gradle-tutorial-part-3-multiple-java-projects-5b1c4d1fbd8d 上阅读了关于多项目构建的优秀教程后需要的缺失部分。但是,对核心项目“from”使用“sourceSets.main.java.srcDirs”的评论导致在我的 jar 文件中包含 .java 和 .class 文件。我切换到`sourceSets.main.output`,现在只得到 .class 文件 (3认同)