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)
当然,它不会考虑您对源目录位置所做的任何更改.
所以,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并不强大,所以我确信中间的可怕部分可以简化,但它现在可以工作了!
这是我们如何创建源代码的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)