首页 文章

如何使gradle ShadowJar任务也创建其子项的源和javadoc?

提问于
浏览
7

我有一个包含8个子项目的gradle项目和一个配置的shadowjar任务来创建一个“all”jar . toplevel项目设置为对其所有子项具有依赖性,这告诉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中心拒绝所有jar,因为它没有相关的源和javadocs jar .

如何告诉gradle还生成源和javadoc? ShadowJar的文档说它应该默认执行此操作 .

1 回答

  • 4

    影子插件似乎没有构建胖源/ javadocs jar的功能 .

    下面,我提供了一些将构建胖javadoc和源jar的简短任务( javadocJarsourcesJar ) . 它们被链接在 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 部分是 required ,即使您已经在子项目中应用了 java 插件 .

    另请注意,它不包括子项目可能依赖的第三方库的javadoc . 但通常你不管怎么说都不想这样做 .

相关问题