2

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 分かかります。

なぜ最初のものは速いのですか?実行時間とは別に、「よりクリーンな」ソリューションはどれですか? それとも、仕事をするためのよりスマートな方法はありますか?

4

1 に答える 1