使用带有 gradle 的混淆器创建混淆的应用程序 jar 时重复的 zip 条目

Duplicate zip entry when creating an obfuscated application jar using proguard with gradle

Java 应用程序本身不包含第三方库依赖项。如果我删除 obfuscate 任务和行 jar.finalizedBy(project.tasks.obfuscate),标准 jar 将构建并可运行。

错误..

* What went wrong:
Execution failed for task ':obfuscate'.
> java.io.IOException: Can't write [/Users/rob/git/repo/build/libs/tool.out.jar] (Can't read [/Users/rob/git/repo/build/libs/tool.jar] (Duplicate zip entry [com/example/cli/j.class == tool.jar:com/example/cli/HelperUtils.class]))

build.gradle ..

task obfuscate(type: proguard.gradle.ProGuardTask) {
    configuration 'proguard.txt'

  injars "build/libs/tool.jar"
  outjars "build/libs/tool.out.jar"
  libraryjars "${System.getProperty('java.home')}/lib/rt.jar"
}

jar {
    archiveName = "tool.jar"
    from sourceSets.main.output.classesDir
    include '**/cli/*.class'
    manifest {
        attributes 'Main-Class': 'com.example.cli.Tool'
    }
}
jar.finalizedBy(project.tasks.obfuscate)

proguard.txt ..

-keep public class com.example.cli.* {*;}

该应用程序包含 3 个 Java class 个文件..

com.example.cli.Tool (which contains the main)
com.example.cli.HelperUtils
com.example.cli.CustomEnums

jar 任务添加了以下内容:

jar {
    duplicatesStrategy = DuplicatesStrategy.EXCLUDE
    ..
}