java - 使用 ProGuard 和 Maven 混淆 Java 代码 : Test classes and ClassNotFoundError

标签 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.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,我收到mypackage.AbstractSimulationFacadeTestClassNotFoundError

我应该如何更改我的 pom.xml 文件,以便 mvn install 运行时不会出现错误?

最佳答案

尝试迁移到新版本的职业守卫插件。您使用的是默认版本,即 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 选项应该是您正在构建的 Artifact (src/main/java 中的代码)的入口点,而不是测试用例的入口点。

最后,在我看来,您已经将抽象测试用例从 src/main/java 移动到了 src/test/java 。如果是这种情况,您可能需要执行mvn clean install来清理目标目录。 Pro Guard 可能会从该项目的先前版本中找到旧类。

关于java - 使用 ProGuard 和 Maven 混淆 Java 代码 : Test classes and ClassNotFoundError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13432291/

相关文章:

java - 创建类路径资源 META-INF/cxf/cxf.xml 中定义的名称为 'cxf' 的 bean 时出错

maven-2 - 您如何选择带有依赖项的 Maven jar 的文件名?

hibernate - Maven 和 pom.xml

java - 正则表达式用一个破折号替换 2 个或多个破折号

java - 如何将 spring-data-rest 与 spring websocket 混合到一个实现中

java - java 允许我将这个对象分配给这个通用字段吗?

maven-2 - 使用 maven 2 : "Can' t find wsdl/wsdls/wsat. wsdl 在 Weblogic 10.3 上部署 Web 应用程序时出错”

java - 使用 buffredReader 在 java 中读取大文件

maven - 在版本 Maven 插件中排除候选版本

java - Maven 复制依赖项不起作用