我想使用ProGuard混淆我的库,并在pom.xml
中添加以下代码:
<build>
<plugins>
...
<plugin>
<groupId>com.pyx4me</groupId>
<artifactId>proguard-maven-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>proguard</goal>
</goals>
</execution>
</executions>
<configuration>
<options>
<option>-allowaccessmodification</option>
<option>-keep class mypackage.AbstractSimulationFacadeTest</option>
</options>
<libs>
<lib>${java.home}/lib/rt.jar</lib>
</libs>
</configuration>
</plugin>
</plugins>
</build>
mypackage.AbstractSimulationFacadeTest
是在src/test/java
中定义的类。它用于单元测试。当我运行
mvn install
时,ProGuard抱怨找不到类mypackage.AbstractSimulationFacadeTest
:[proguard] Note: the configuration refers to the unknown class 'mypackage.AbstractSimulationFacadeTest'
[proguard] Note: there were 1 references to unknown classes.
[proguard] You should check your configuration for typos.
[proguard] Error: The output jar is empty. Did you specify the proper '-keep' options?
当我删除线
<option>-keep class mypackage.AbstractSimulationFacadeTest</option>
并运行
mvn install
,我得到ClassNotFoundError
的mypackage.AbstractSimulationFacadeTest
。如何更改我的
pom.xml
文件,以便mvn install
正常运行? 最佳答案
尝试升级到Pro Guard插件的较新版本。您正在使用默认版本2.0.4。 quick search of maven表示GitHub上有一个更新的版本,但是在另一个组ID下:
<groupId>com.github.wvengen</groupId>
<artifactId>proguard-maven-plugin</artifactId>
<version>2.0.6</version>
这应该可以帮助您使用ProGuard 4.8,它可以解决此问题。
另外,查看Pro Guard docs,您的-keep选项应该是您正在构建的工件(src / main / java中的代码)而不是测试用例的入口点。
最后,在我看来,您好像已经将抽象测试用例从src / main / java移至src / test / java。在这种情况下,您可能需要执行mvn clean安装以清理目标目录。 Pro Guard可能正在从项目的先前版本中找到旧的类。