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

如何使用Gradle生成源代码的ZIP?,gradle,zip,software-distribution,Gradle,Zip,Software Distribution,我正在将一个相对较小的项目从Ant转换为Gradle。我希望将构建脚本中的行数减少大约75% Ant构建所做的一件事是生成一个源ZIP(即整个项目的ZIP,删除了某些位-./构建、各种Eclipse文件夹等)。在将其迁移到Gradle时,我决定使用“包含”方法,而不是“独占”方法,这样以后就不会意外地包含内容 我希望能够获取所有源代码集的源代码和资源,而不必显式列出目录,但我无法让它工作 以下是我到目前为止所拥有的(甚至没有运行过!): ZIP文件应该以文件夹“src/main/java/…”、

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

Ant构建所做的一件事是生成一个源ZIP(即整个项目的ZIP,删除了某些位-./构建、各种Eclipse文件夹等)。在将其迁移到Gradle时,我决定使用“包含”方法,而不是“独占”方法,这样以后就不会意外地包含内容

我希望能够获取所有源代码集的源代码和资源,而不必显式列出目录,但我无法让它工作

以下是我到目前为止所拥有的(甚至没有运行过!):

ZIP文件应该以文件夹“src/main/java/…”、“src/main/resources/…”、“src/test/java/…”结束,并且当我以后添加更多源代码集时,不需要重新访问此任务


提前谢谢

要将所有源文件放入一个zip文件,可以使用以下方法:

task srcZip(type: Zip) {
    classifier = 'src'
    from sourceSets*.allSource
}
task srcZip2(type: Zip) {
    classifier = 'src'
    from projectDir
    include 'src/**/*'
}
但它不会给出您要求的目录结构。所有源集中的文件都放在同一层次结构中

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

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

当然,它没有考虑到您可能对源目录位置所做的任何更改。

因此,21个月后,我做了以下工作来实现这一点(使用Gradle 1.2)


<我的Groovy Fu不太强,所以我确信中间的可怕位可以被简化,但它现在起作用了! 下面是另一种创建源代码zip的方法。我们可以根据需要包括/排除文件。在我使用的自定义插件的情况下工作,我花了很多时间研究如何使其工作。最后,我可以使用以下代码实现它:

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

我的一个项目的示例:

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

隐马尔可夫模型。。。是的,但这让我觉得有点。。。肮脏!谢谢你的回答。如果在几天内我得不到更符合我要求的答案,我将授予你代表资格。再次感谢,我明白你的意思。我试图诱使第一个表单生成您想要的目录结构,但无法实现。我想共享我的定制:将
println“Path添加到zip:$archivePath.Path”
,您将在日志中看到生成的zip的路径。这应该包括sourceset*.allSource.srcDirs*.collect{relativePath(it)+“/****.*}.flant()否则,你只会得到源文件夹,而不是Gradle2.1的内容。嗨,我正在使用一个自定义的Gradle插件项目来实现这一点,但这段代码(如果直接使用)不适合我。它在分类器上给出错误,如果我删除,它给出错误:找不到属性projectDir。任何我可以让我的代码工作的想法。