1

Gradle を使用して JavaFX アプリケーションを構築しています。私がよく遭遇する問題は、META-INF/LICENSE の「重複エントリ」エラーです。

私の jar には Amazon AWS SDK への依存関係が含まれているため、そこからエラーが生成されると想定しています。この時点まで、ここで説明されている解決策を見つけました。

Gradle プラグイン v0.13.1 の後に Zip エントリが重複する

これは私の正確な問題を説明していますが、Android Gradle のコンテキストでのみです。

具体的には、解決策は次のとおりです。

android.packagingOptions {
    pickFirst 'META-INF/LICENSE.txt'
}

もちろん、そのようなオプションは Gradle には明らかに存在しません。私の質問: 重複した META-INF/LICENSE の発生を手動で探して削除するのではなく、ビルド コードでこの問題に対処する簡単な方法はありますか?

完全を期すために、gradle assemble が生成するエラーは次のとおりです。

Caused by: java.util.zip.ZipException: duplicate entry: META-INF/LICENSE
    at com.sun.javafx.tools.packager.PackagerLib.copyFromOtherJar(PackagerLib.java:1409)
    at com.sun.javafx.tools.packager.PackagerLib.jar(PackagerLib.java:1366)
    at com.sun.javafx.tools.packager.PackagerLib.packageAsJar(PackagerLib.java:288)
    ... 54 more

そして私のgradle.buildスクリプト:

apply from: 'javafx.plugin'

repositories {
    mavenCentral()
}

dependencies {
    compile ('com.amazonaws:aws-java-sdk:1.9.13') {
        exclude group: 'commons-io', module: 'commons-io'
    }
    testCompile group: 'junit', name: 'junit', version: '4.+'
}

jar  {
   from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
   manifest {
      attributes 'Main-Class': 'com.buddyware.treefrog.Main'
   }
}
4

1 に答える 1

1

Mark Vieira の提案と実際の例を少し掘り下げることに基づいて、build.gradle ファイルの jar タスクを次のように変更しました。

jar  {
   duplicatesStrategy(DuplicatesStrategy.EXCLUDE)
   from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
   manifest {
      attributes 'Main-Class': 'com.buddyware.treefrog.Main'
   }
}

「gradle assemble」を実行すると、問題なく成功しました。

于 2014-12-31T12:33:42.363 に答える