gradle を使用してファット jar を作成するには、次の 2 つの方法があります。
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')
}
}
}
}
}
グラドルの方法を使用して:
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 秒、2 番目のアプローチは 3 分かかります。
なぜ最初のものは速いのですか?実行時間とは別に、「よりクリーンな」ソリューションはどれですか? それとも、仕事をするためのよりスマートな方法はありますか?