我在多模块 Maven 项目中有一个对 proguard 的插件引用。
我的项目的功能已经过全面测试并且可以工作......直到我添加 proguard。
我的项目的结构
parent-pom
-module-a-pom
-module-b-pom
tester-pom
- 模块 b 依赖于模块 a。
- module-a 和 module-b 都安装到我的本地 Maven 存储库中。
- tester 依赖于 module-a 和 module-b。
- 我的 proguard.conf 文件位于文件系统上的parent-pom pom.xml 文件旁边。
- 我在 module-a 和 module-b pom.xml 文件中配置了 proguard。
我的混淆器配置如下所示:
<plugin>
<groupId>com.github.wvengen</groupId>
<artifactId>proguard-maven-plugin</artifactId>
<version>2.0.8</version>
<executions>
<execution>
<id>process-classes-with-proguard</id>
<phase>process-classes</phase>
<goals>
<goal>proguard</goal>
</goals>
<configuration>
<injar>classes</injar>
<proguardVersion>5.1</proguardVersion>
<proguardInclude>${project.basedir}/../proguard.conf</proguardInclude>
<libs>
<lib>${java.bootstrap.classes}</lib>
<lib>${java.secure.socket.extension.classes}</lib>
<lib>${java.cryptographic.extension.classes}</lib>
</libs>
<obfuscate>true</obfuscate>
</configuration>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>net.sf.proguard</groupId>
<artifactId>proguard-base</artifactId>
<version>5.1</version>
<scope>runtime</scope>
</dependency>
</dependencies>
</plugin>
我的项目使用 GSON 反序列化来自我无法控制的外部组件的一些传入 JSON,这增加了我的复杂性。
在构建过程中执行 proguard 会导致 GSON 代码抛出 NullPointerExceptions
受 proguard 影响的代码是:
Gson gson = new Gson();
Type collectionType = new TypeToken<ArrayList<MyType>>(){}.getType();
ArrayList<MyType> myTypes = gson.fromJson(json, collectionType);
如果 proguard 在我的 pom 文件中被注释掉(所以它不会执行),那么这段代码(以及我项目的其余部分)就像一个魅力。
如何配置混淆器来混淆我的代码但不破坏功能?对于多模块项目来说这可能吗?
Does anyone知道如何为多模块 Maven 项目配置 proguard 吗?
注意:我已经尝试过了this https://stackoverflow.com/questions/16563916/proguard-issue-while-using-gson这似乎对结果没有影响。