使用ProGuard和Maven模糊Java代码:测试类和ClassNotFoundError

时间:2012-11-17 16:09:45

标签: java maven maven-2 proguard

我想用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.AbstractSimulationFacadeTestsrc/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 installClassNotFoundError获得mypackage.AbstractSimulationFacadeTest

我应该如何更改pom.xml文件,以便mvn install无误地运行?

1 个答案:

答案 0 :(得分:2)

尝试转移到较新版本的专业保护插件。您使用的是默认版本,即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 install 来清理目标目录。 Pro Guard可能会从项目的先前版本中找到旧类。