我正在将一个相对较小的项目从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 / ...'等,当我稍后添加更多源集时,我不需要重新访问此任务。
提前致谢!
答案 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"
}
}