我有两种方法可以用gradle创建一个胖罐子:
使用ant任务:
jar {
doLast {
ant.jar(destFile: jar.archivePath, update: 'true') {
configurations.compile.files.each { file ->
zipfileset(src: file) {
exclude(name: '**/META-INF/maven')
exclude(name: '**/META-INF/maven/**/*')
exclude(name: '**/templates')
exclude(name: '**/about_files')
exclude(name: '**/about_files/**/*')
exclude(name: '**/*html')
exclude(name: '**/*readme*')
exclude(name: '**/*txt')
exclude(name: '**/*inf')
exclude(name: '**/*SF')
exclude(name: '**/*RSA')
exclude(name: '**/*.vm')
exclude(name: '**/empty.file')
}
}
}
}
}
使用gradle方式:
jar {
dependsOn configurations.compile
from (configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }) {
exclude '**/META-INF/maven'
exclude '**/META-INF/maven/**/*'
exclude '**/templates'
exclude '**/about_files'
exclude '**/about_files/**/*'
exclude '**/*html'
exclude '**/*readme*'
exclude '**/*txt'
exclude '**/*inf'
exclude '**/*SF'
exclude '**/*RSA'
exclude '**/*.vm'
exclude '**/empty.file'
}
}
这两个任务都会创建一个相同的jar文件。但第一种方法需要20秒,第二种方法需要3分钟。
为什么第一个更快?除了执行时间:哪一个是“更清洁”的解决方案?或者有更聪明的方法来完成这项工作吗?
答案 0 :(得分:1)
前一个任务缺少dependsOn configurations.compile
,这可以解释为什么执行此任务的速度更快。另一个主要区别是,仅对第二个任务,任务输入被正确声明(即Gradle可以可靠地确定任务是否为up-to-date
),如果configurations.compile
中的文件很大,则可能需要一段时间。
PS:第二项任务应使用from { configurations.compile.collect { ... } }
以避免在配置阶段进行工作。这将加速不涉及该任务的构建调用。