java - Proguard - 如何使用共享输入 jar 创建多个输出 jar

标签 java ant build proguard

例如,我希望每个输出 jar 都包含其上方的两个 injar:

# Windows Client
-injars common.jar
-injars windowsClient.jar
-outjar windowsClient.jar

# Mac Client
-injars common.jar
-injars macClient.jar
-outjar macClient.jar

# Windows Server 
-injars common.jar
-injars windowsServer.jar
-outjar windowsServer.jar

# Mac Server 
-injars common.jar
-injars macServer.jar
-outjar macServer.jar

所以这有效,并且只包含每个 jar 的特定代码。问题是我还收到来自 proguard 的大量“程序类定义重复”警告。我认为这是因为重复的 -injars common.jar ,但我不知道如何解决这个问题。如果我从每个分组中删除 -injars common.jar ,则会收到有关必须使用过滤器的错误。

有没有办法例如说:

# Windows Server (3 step)
-removeJars macClient.jar
-injars ...
-outjars windowsServer.jar

最佳答案

ProGuard 的目的是忽略重复的输入类(除了打印注释之外)并将每个已处理的类写入单个 jar。您可以为 commons.jar 创建一个单独的输出 jar,然后将其合并到其他 jar 中。

你的技巧恰好奏效了,因为多次读取同一个 commons.jar 的效率有些低下。您可以使用 -dontnote 抑制警告。

注释:

  • 输入 jar 和输出 jar 的名称必须不同。
  • 您可能需要禁用类合并(-optimizations !class/merging/*),以防止类在 jar 之间迁移。

关于java - Proguard - 如何使用共享输入 jar 创建多个输出 jar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17743391/

相关文章:

ant - 当我尝试使用 Ivy 解决依赖关系时,我的 Ant 构建挂起

maven - 使用maven批量更新现有jar的manifest.mf

java - 如何在 java 中删除 JTextArea 中的文本?

java - 生菜-Java-AWS ElastiCache-Redis-连接超时

java - 如何使用 jxls 上传和更新集 DB .xls 或 .xlsx 文件

ant - com.android.ant.NewSetupTask 升级到 SDK v20 工具后未找到错误

javascript - 我的 NODE 代码不工作是因为我使用的是 Windows 而不是 Linux?

Xcode 在没有指定和错误的情况下失败

gradle - Intellij 和 gradle 依赖问题

java - 如何使用反射访问 JUnit 中的私有(private) map ?