15

我正在将一个相对较小的项目从 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

4 回答 4

22

要将所有源代码放入 1 个 zip 文件中,您可以使用以下命令:

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

它不会为您提供您要求的目录结构。来自所有源集的文件被放入相同的层次结构中。

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

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

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

于 2011-01-28T21:07:50.687 回答
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 不强,所以我敢肯定中间那个可怕的部分可以简化,但现在可以了!

于 2012-09-20T08:16:46.267 回答
5

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

Task taskSourceZip = project.task("makeSourceZip", type:Zip){
        baseName = "sourceZip"
        from (project.rootDir){
            exclude ('*/*.iml')
            exclude 'sourceZip.zip'
        }
        destinationDir project.rootDir
    }
于 2016-03-04T10:33:16.983 回答
1

我的一个项目的示例:

task srcZip(type: Zip) {
    classifier = 'src'
    from projectDir
    include 'src/**/*'
    include '*.gradle'
    include 'README.md'
    doLast {
        println "Path to zip: $archivePath.path"
    }
}
于 2018-12-13T22:50:45.263 回答