如何使用Gradle生成我的源码的ZIP?

时间:2011-01-27 22:11:50

标签: gradle zip software-distribution

我正在将一个相对较小的项目从Ant转换为Gradle。我希望将构建脚本中的行数减少大约75%!

Ant构建的一件事是生成源ZIP(即整个项目的ZIP,删除了某些位 - ./build,各种Eclipse文件夹等)。虽然将其迁移到Gradle,但我决定使用一种“包容性”的方法,而不是一种“排他性”的方法,以便以后不会偶然包含事物。

我希望能够获取所有源集的源代码和资源,而无需明确列出目录,但我无法使其正常工作。

这是我到目前为止所做的事情(甚至没有!):

task srcZip(type: Zip) {
    classifier = 'src'
    from projectDir
    include {
        sourceSets.collect {
            it.allSource.asPath
        }
    }
}

ZIP文件最终应该包含文件夹'src / main / java / ...','src / main / resources / ...','src / test / java / ...'等,当我稍后添加更多源集时,我不需要重新访问此任务。

提前致谢!

4 个答案:

答案 0 :(得分:20)

要将所有资源转换为1个zip文件,您可以使用:

task srcZip(type: Zip) {
    classifier = 'src'
    from sourceSets*.allSource
}

它不会提供您要求的目录结构。所有源集中的文件都放在同一层次结构中。

要获得您的要求,可以使用:

task srcZip2(type: Zip) {
    classifier = 'src'
    from projectDir
    include 'src/**/*'
}

当然,它不会考虑您对源目录位置所做的任何更改。

答案 1 :(得分:8)

所以,21个月之后,这就是我为实现这一目标所做的工作(使用Gradle 1.2)

task srcZip(type: Zip) {
    classifier = 'src'
    from projectDir
    include sourceSets*.allSource.srcDirs*.collect { relativePath(it) }.flatten()
    include 'LICENCE', 'README', 'NOTICE', 'gradlew*'
}
assemble.dependsOn(srcZip)

我的Groovy-fu并不强大,所以我确信中间的可怕部分可以简化,但它现在有效!

答案 2 :(得分:5)

这是我们如何创建源代码的zip的另一种方式。我们可以根据要求包含/排除文件。在我使用的自定义插件的情况下工作,我花了很多时间弄清楚如何使这项工作。最后,我可以使用下面的代码实现它:

Task taskSourceZip = project.task("makeSourceZip", type:Zip){
        baseName = "sourceZip"
        from (project.rootDir){
            exclude ('*/*.iml')
            exclude 'sourceZip.zip'
        }
        destinationDir project.rootDir
    }

答案 3 :(得分:0)

我的一个项目的示例:

task srcZip(type: Zip) {
    classifier = 'src'
    from projectDir
    include 'src/**/*'
    include '*.gradle'
    include 'README.md'
    doLast {
        println "Path to zip: $archivePath.path"
    }
}