首页 > 解决方案 > 为多模块 gradle 项目创建单个源 jar

问题描述

我有一个这样的多模块 gradle 项目设置:

Module A (Parent)
-build.gradle
-settings.gradle
+Module B
--src
---main
----java
----kotlin
--build.gradle
+Module C
--src
---main
----java
----kotlin
--build.gradle

在这种情况下,模块 B 对模块 C 具有编译时依赖性。

我想创建一个源 jar,包括所有子项目的源以发布到我的存储库。

在单个模块构建中,我已将以下内容添加到我的项目中,但将其添加到所有子项目不会导致在生成的源 jar 中收集源集:

sourceSets {
    main.kotlin.srcDirs += 'src/main/kotlin'
    main.java.srcDirs += 'src/main/java'
}

task sourcesJar(type: Jar) {
    from sourceSets.main.kotlin
    from sourceSets.main.java
    archiveClassifier = 'sources'
}

我怎样才能做到这一点?ShadowJar 有效,但不幸的是,据我所知,它不提供创建源 jar 的选项。

标签: gradlebuildmulti-modulebuild-system

解决方案


我们找到了一个解决方案 - 将子模块部署为独立的源 jar 并单独包含它们。

例如,在每个子模块中:

sourceSets {
    main.kotlin.srcDirs += 'src/main/kotlin'
    main.java.srcDirs += 'src/main/java'
}

task sourcesJar(type: Jar) {
    from sourceSets.main.kotlin
    from sourceSets.main.java
    archiveClassifier = 'sources'
}

publishing {
    publications {
        mavenJava(MavenPublication) {
            groupId = rootProject.group
            artifactId = "$rootProject.name-$project.name"
            version = rootProject.project.version
            from components.java
            artifact sourcesJar
        }
    }

推荐阅读