java - 使用 Gradle 6 构建避免拆分包的附加工件

标签 java gradle java-module

我有一个 Gradle 6.5 项目 bar它有几个子项目并使用拆分包,我无法在当前配置中删除。
我想再打包一个bar-all通过 MANIFEST.MF 声明自动模块名称的工件

Automatic-Module-Name: com.foo.bar
并包含来自所有子项目的所有类。这个附加工件的主要目的是用于模块化应用程序并避免拆分包问题。
我怀疑我需要获取其他子项目的构建输出并在 bar-all 内的自定义 Jar 任务中重用它们但找不到一个很好的例子。

最佳答案

对于下面的示例结构,其中 top 项目依赖于所有子项目 - 所以 top 构建 uber jar

top 
 |___spa
 |___spb
 |___spc
 |___spd
 |___spe
设置.gradle
rootProject.name = 'top'

include 'spa', 'spb', 'spc', 'spd', 'spe'
构建.gradle
dependencies {
    implementation project('spa')
    implementation project('spb')
    implementation project('spd')
    implementation project('spe')

    implementation 'com.google.guava:guava:28.1-jre'
}

task jarAll(type: Jar, dependsOn: jar) {
    archiveClassifier = 'all'
    from sourceSets.main.output
    dependsOn configurations.runtimeClasspath
    from {
        configurations.runtimeClasspath.allDependencies.findAll { it instanceof ProjectDependency }.collect { it.dependencyProject.sourceSets.main.output }
    }
    manifest {
        attributes (
            "Automatic-Module-Name": "com.foo.bar" )
    }
}
top-all.jar 将包含来自子项目的类;

关于java - 使用 Gradle 6 构建避免拆分包的附加工件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63020806/

相关文章:

gradle - 如何通过gradle为AspectJ和spring-aspects在STS(eclipse)中设置.classpath

java - JDK 11.0.2 - 无法在 ECLIPSE 中派生模块描述符

java - 如何在命令行上为java在模块路径上指定多个jar文件?

java - Android with Firebase - 尝试填充列表时出现 NullPointerException

java - SMS PDU 格式 - 如何提取消息部分

java - Gradle:以编程方式指定compileJava任务的编译器选项

Java 9 重叠的非导出包

java - 无法设置 HttpsURLConnection 的授权 header

java - java中的浅克隆: String and Object showing different behaviours

java - 将Spring Boot项目发布为Maven存储库中的库