如何使用Gradle Distribution插件挑选ZIP内容?

sme*_*eeb 4 configuration zip plugins gradle

My Gradle构建当前build在我的项目根目录下的dir 下生成以下目录结构:

myapp/
    src/
    build.gradle
    build/
        docs/
            groovydoc/* (all Groovydocs)
        libs/
            myapp-SNAPSHOT.jar
            myapp-SNAPSHOT-sources.jar
        reports/
            codenarc/
                main.html
        test-results/* (JUnit test results)
Run Code Online (Sandbox Code Playgroud)

我想添加distribution插件(或任何实现我的目标的插件),让Gradle生成一个具有以下目录结构的ZIP文件:

myapp-SNAPSHOT-buildreport.zip/
    tests/
        (JUnit tests from build/test-results above)
    reports/
        main.html (CodeNarc report from build/reports/codenarc above)
    api/
        (Groovydocs from build/docs above)
    source/
        myapp-SNAPSHOT-sources.jar (from build/libs above)
    bin/
        myapp-SNAPSHOT.jar (from build/libs above)
Run Code Online (Sandbox Code Playgroud)

阅读插件的文档后,我无法告诉如何配置它以满足这些需求.很明显我需要运行gradle distZip,但至于如何实际配置它以产生所需的目录结构,它似乎没有提供任何文档/示例.有任何想法吗?

注意:JAR的版本显然是SNAPSHOT,并使用-Pversion=SNAPSHOT命令行参数传递给Gradle构建.

Mar*_*ira 7

我可能不会使用分发插件而只是创建一个新的自定义Zip任务.它看起来像这样:

task buildreportZip(type: Zip, dependsOn: build) {
    classifier = 'buildreport'

    from('build/test-results') {
        into 'tests'
    }

    from('build/reports/codenarc') {
        into 'reports'
    }

    from('build/docs') {
        into 'api'
    }

    from(sourcesJar) { // or whatever you source jar task name is
        into 'source'
    }

    from(jar) {
        into 'bin'
    }
}
Run Code Online (Sandbox Code Playgroud)


Tha*_*dry 6

Gradle Distribution插件自动具有默认值(问题是文档没有告诉我们默认值,但Gradle项目默认结构是假定的)所以如果您的Gradle项目相当简单且已经使用src/main/groovy或者src/main/java,您通常只需要...

使用CopySpec反转模式给你into{}(制作一个目录)包含内容from{},而不是反过来,如下所示:

apply plugin: 'groovy'
apply plugin: 'eclipse'
apply plugin: 'application'

distributions {
    main {
        baseName= 'vz_sde_dm'
        contents {
            into('bin/config') {
                from 'config'
            }
            into('lib/samples') {
                from 'samples'
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

注意我不需要from{}为我定义一个contents{},但仅仅into{}s是因为我已经使用了默认的Gradle Groovy项目布局,并且在我的项目中只在Eclipse中添加了2个额外的文件夹(config&samples),但需要将这2个文件夹放到略有不同的位置与我的常规构建文件夹布局相比,我的分发层次结构.