我们正在尝试从多个文件系统源树中在Gradle中构建一个复杂的Zip文件,但无论我们提供多少into
个规范,它们都将它们放在同一个文件系统中。这可以在Gradle中做到吗?
build/libs/foo.jar --> foo.jar
bar/* --> bar/*
我们得到了这个:
build/libs/foo.jar --> bar/foo.jar
bar/* --> bar/*
使用此:
task installZip(type: Zip, dependsOn: jar) {
from('build/libs/foo.jar').into('.')
from('bar').into('bar')
}
任何帮助都将不胜感激。
编辑:Gradle 1.0-milestone-3
答案 0 :(得分:22)
试试这个:
task zip(type: Zip) {
from jar.outputs.files
from('bar/') {
into('bar')
}
}
首先...... jar应该在zip / root中(这似乎是你想要的)。其次,通过指定from jar.outputs.files
,jar任务上有一个隐式dependsOn
,所以这显示了另一种完成你想要的方法。除了这种方法,如果罐子名称随时间变化,则无关紧要。如果您需要其他帮助,请与我们联系。
答案 1 :(得分:7)
显然,对答案的评论不允许以方便的方式显示更多代码...或者它不是很明显:)我有一个项目是为客户...所以我无法分享完整的项目/构建文件。这是我可以分享的内容(我将项目特定的acron更改为XXX):
task zip(type: Zip) { from jar.outputs.files from('scripts/') { fileMode = 0755 include '**/runXXX.sh' include '**/runXXX.bat' } from('lib/') { include '**/*.jar' into('lib') } from('.') { include 'xxx.config' } }
这会在zip的根目录中创建一个带有项目jar的zip。将脚本从目录复制到根目录,将配置文件复制到根目录,并在名为/ lib的zip的根目录中创建目录,并将所有jar从项目/ lib复制到zip / lib。
答案 2 :(得分:0)
此答案不能直接回答问题,但我想这会对写“ Gradle插件”的人有所帮助
final Zip zipTask = project.getTasks().create(taskName, Zip.class);
final Action<? super CopySpec> cp1 = (p) -> {
p.include("**/Install_*.xml", "**/Install.xml").into(WORKING_DIR_1);
};
final Action<? super CopySpec> cp2 = (p) -> {
p.include("*Terminology*.xml").into(WORKING_DIR_2);
};
zipTask.from(projectDir + "/Release", cp1);
zipTask.from(projectDir + "/Release", cp2);