gradle - 为多模块 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 的选项。
解决方案
我们找到了一个解决方案 - 将子模块部署为独立的源 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
}
}
推荐阅读
- angular - 在 vscode angular 6 中运行 ng serve --open 时,我面临以下问题
- python - 可以设置 include_requires 绕过 PyPI 中的最佳匹配并克隆 repo 吗?
- php - 如何更改 SVG 的宽度和高度以使其响应?
- java - 尝试在空对象引用上调用虚拟方法“void android.widget.TextView.setText(java.lang.CharSequence)”?
- samtools - 如何使用 pysam 在 bam 文件中添加带有读取质量分数的“OQ”标签作为附加字段
- c++ - 为什么我能够增加指向单个新 int 位置的指针?令人惊讶的是它运作良好
- python - 为什么我生成的 WHERE 子句不正确?
- playlist - 在 Android 中为 ExoPlayer 使用 ConcatenatingMediaSource
- python - 如何根据条件将数据框列拆分为单独的列
- angular - Ngrx 问题试图结合 DRY 原则和良好的动作卫生