我正在尝试使用 Proguard 来缩小 jar 大小。
我在 Maven pom.xml 中配置了 Proguard。它未能找到所有嵌入的依赖项 jar。 它可以读取并解析出当前模块中引用的所有依赖jar,但是对于嵌入在其他模块中的依赖,它无法找到它。
例如,我当前的模块是 moduleA,它依赖于另一个模块 moduleB。并且模块B有一个依赖模块C。它可以找到直接位于 moduleB 内部的所有类,但无法解析出 moduleC 内部的所有类。我的 proguard 配置如下:
<plugin>
<!--groupId>com.pyx4me</groupId-->
<groupId>com.github.wvengen</groupId>
<artifactId>proguard-maven-plugin</artifactId>
<executions>
<execution>
<id>proguard</id>
<phase>package</phase>
<goals>
<goal>proguard</goal>
</goals>
</execution>
</executions>
<configuration>
<injar>MyInput-${project.version}.jar</injar>
<outjar>MyInput-Processed-${project.version}.jar</outjar>
<options>
<option>-keep public class * { *; }</option>
<option>-ignorewarnings</option>
</options>
<libs>
<!--lib>${java.bootstrap.classes}</lib>
<lib>${java.cryptographic.extension.classes}</lib>
<lib>${java.secure.socket.extension.classes}</lib-->
</libs>
</configuration>
<dependencies>
<dependency>
<groupId>net.sf.proguard</groupId>
<artifactId>proguard-base</artifactId>
<version>4.10</version>
<scope>runtime</scope>
</dependency>
</dependencies>
</plugin>
最佳答案
我遇到了类似的问题,但是它可以找到插件的配置依赖项部分中提到的引用。
但是,如果我尝试使用 proguard-base-4.10,proguard-maven-plugin(带有 com.pyx4me groupId)仍然使用 proguard-4.3.jar(您可以在控制台的 maven 输出中看到它);看起来该插件仅适用于“proguard” Artifact ,而不是“proguard-base”。
所以我将依赖项部分配置为如下所示:
<dependency>
<groupId>net.sf.proguard</groupId>
<artifactId>proguard</artifactId>
<version>4.10</version>
<scope>runtime</scope>
</dependency>
但这一个在 central maven repo 中不可用(最新版本为4.4)。
我所做的是从 proguard download section 手动下载 proguard-4.10并在 4.10 版本下在本地 Maven 存储库中安装 proguard.jar - 现在一切正常。
关于java - Proguard 与 Maven,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18202256/