我有两种方法可以用 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 分钟。
为什么第一个更快?除了执行时间:哪一个是“更清洁”的解决方案?还是有更聪明的方法来完成这项工作?