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

dty*_*dty 14 zip software-distribution gradle

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

Ant构建的一件事是生成源ZIP(即整个项目的ZIP,删除了某些位 - ./build,各种Eclipse文件夹等).虽然将其迁移到Gradle,但我决定使用"包含" "方法,而不是"独占"的方法,以便事情不会在以后被意外包括在内.

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

这是我到目前为止(甚至没有运行!):

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

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

提前致谢!

Dav*_*ick 21

要将所有资源放入1个zip文件,您可以使用:

task srcZip(type: Zip) {
    classifier = 'src'
    from sourceSets*.allSource
}
Run Code Online (Sandbox Code Playgroud)

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

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

task srcZip2(type: Zip) {
    classifier = 'src'
    from projectDir
    include 'src/**/*'
}
Run Code Online (Sandbox Code Playgroud)

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


dty*_*dty 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)
Run Code Online (Sandbox Code Playgroud)

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


sve*_*ver 5

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

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