我有一个gradle项目,其中包含8个子项目和一个配置的shadowjar任务,用于创建“所有” jar。顶层项目设置为对其所有子项具有依赖项,这告诉shadowjar包括哪些内容:
project(':') {
dependencies {
compile project(':jfxtras-agenda')
compile project(':jfxtras-common')
compile project(':jfxtras-controls')
compile project(':jfxtras-icalendarfx')
compile project(':jfxtras-icalendaragenda')
compile project(':jfxtras-menu')
compile project(':jfxtras-gauge-linear')
compile project(':jfxtras-font-roboto')
}
}
shadowJar {
classifier = null // do not append "-all", so the generated shadow jar replaces the existing jfxtras-all.jar (instead of generating jfxtras-all-all.jar)
}
这可以正常工作,但是Maven Central拒绝所有jar,因为它没有关联的源和javadocs jar。
我如何告诉gradle还要生成源代码和javadoc? ShadowJar的文档说默认情况下应该这样做。
最佳答案
影子插件似乎没有构建胖源/ javadocs jar的功能。
下面,我提供了一些简短的任务(javadocJar
和sourcesJar
),它们将构建大量的javadoc和源jar。它们被链接为始终在shadowJar
之后执行。但是它与Shadow jar插件无关。
subprojects {
apply plugin: 'java'
}
// Must be BELOW subprojects{}
task alljavadoc(type: Javadoc) {
source subprojects.collect { it.sourceSets.main.allJava }
classpath = files(subprojects.collect { it.sourceSets.main.compileClasspath })
destinationDir = file("${buildDir}/docs/javadoc")
}
task javadocJar(type: Jar, dependsOn: alljavadoc) {
classifier = 'javadoc'
from alljavadoc.destinationDir
}
task sourcesJar(type: Jar) {
classifier = 'sources'
from subprojects.collect { it.sourceSets.main.allSource }
}
shadowJar.finalizedBy javadocJar
shadowJar.finalizedBy sourcesJar
注意,即使您已经在子项目中应用了
subprojects
插件,java
部分也是必需的。还要注意,它不包括您的子项目可能依赖的第三方库的javadocs。但是通常,您可能不想这样做。