【问题标题】:Creating a single source jar for a multi-module gradle project为多模块 gradle 项目创建单个源 jar
【发布时间】:2020-07-29 15:48:22
【问题描述】:

我有一个这样的多模块 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 的选项。

【问题讨论】:

  • 出于好奇,你为什么想要一个单一的源 jar?
  • 在我们的用例中,多模块项目作为一个库,由位于其他地方的应用程序所依赖。在实践中,依赖于模块 C 的子模块比我的示例中的要多,目前我们希望能够从其他应用程序中依赖它们。子模块本身都非常轻量级,因此我们希望尽可能避免创建存储库集合来容纳它们。

标签: gradle build multi-module build-system


【解决方案1】:

我们找到了解决方案 - 将子模块部署为独立的源 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
        }
    }

【讨论】:

    猜你喜欢
    • 2014-05-09
    • 2020-06-20
    • 2018-11-28
    • 2019-01-19
    • 2019-07-02
    • 1970-01-01
    • 2016-09-12
    • 2013-10-19
    • 2019-10-18
    相关资源
    最近更新 更多