【问题标题】:How to include subproject classes in jar?如何在 jar 中包含子项目类?
【发布时间】:2015-11-11 14:33:48
【问题描述】:

经过数小时的研究和尝试,我希望有人能解释我们如何让 Gradle 将一个或多个子项目的类包含到特定的 jar 中。

假设我们只有三个模块

  1. 核心
  2. 应用
  3. 网络

显然AppWeb 项目工件(jar)应该包含来自Core 项目的所有类。

设置分级:

rootProject.name = 'MyProject'
include 'MyProjectCore'
include 'MyProjectApp'
include 'MyProjectWeb'

MyProjectApp / MyProjectWeb:

...
dependencies {
    ...
    compile project(':MyProjectCore')
}

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

【问题讨论】:

  • 您要构建什么样的目标包?如果以后应该将其部署到应用程序服务器(我假设这是因为涉及到一个“网络”子项目),您也可以尝试使用 gradle 的 ear 或 war 插件。有专门的依赖范围可以按照你想要的方式添加子 jars/wars。

标签: java gradle


【解决方案1】:

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

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

jar {
    from project.sourceSets.main.allSource
    from project(":MyProjectCore").sourceSets.main.java.srcDirs
}

【讨论】:

  • 谢谢,这是我在阅读rominirani.com/… 上关于多项目构建的优秀教程后需要的缺失部分。一条评论虽然使用sourceSets.main.java.srcDirs 作为核心项目from 导致在我的jar 文件中包含.java 和.class 文件。我切换到sourceSets.main.output,现在只得到 .class 文件
  • 除了加from project(":MyProjectCore").sourceSets.main.output还有其他好的解决办法吗?
【解决方案2】:

有了这个,你可以将在你的子项目中创建的所有 *.class 文件自动添加到你的 jar 中:

jar {
    from {
        subprojects.collect { it.sourceSets.main.output }
    }
}

要确保 .class 存在,请确保根项目依赖于子项目:

dependencies {
    compile project(':mySubProject')
}

【讨论】:

    猜你喜欢
    • 2023-03-27
    • 1970-01-01
    • 2014-02-09
    • 2017-09-12
    • 2012-06-05
    • 2017-05-28
    • 2011-03-15
    • 1970-01-01
    • 2017-11-06
    相关资源
    最近更新 更多