我试图编译和混淆2个项目,其中一个项目依赖于另一个项目,并且两个项目都是使用Spring boot maven插件构建的。
为了简单起见,我们将它们称为main和util项目。
构建有两个阶段。在第一阶段,将构建util项目。在第二阶段,主要项目取决于util项目。
我的问题是Spring boot maven插件创建了嵌套的jar。 (https://docs.spring.io/spring-boot/docs/current/reference/html/executable-jar.html)
因此,如果我首先尝试使用Spring boot maven插件重新打包项目,然后混淆包含util和主项目的重新打包的jar,则首先proguard提取重新打包的jar的内容,提取的内容将包含util jar 。然后Proguard不会混淆该util jar的内容,因为它是一个jar,而不是一组类文件。
如果我首先尝试使用proguard对util项目进行混淆,然后使用Spring boot maven插件重新打包,则混淆会完成,但是当我尝试编译主项目时,它将无法在生成的jar中找到必要的符号来自util项目。
那么如何混淆使用Spring boot maven项目重新打包的项目?
答案 0 :(得分:0)
在主模块中声明proguard-maven-plugin和spring-boot-maven-plugin(必须在spring boot插件重新打包目标之前执行proguard软件包阶段)。仅在作为入口点的模块中声明它-无需在子模块或父pom中声明它。
然后,在您的proguard插件配置中,添加除主jar之外还要混淆的模块:
<configuration>
<assembly>
<inclusions>
<inclusion>
<groupId>com.yourgroupid</groupId>
<artifactId>submodule</artifactId>
</inclusion>
</inclusions>
</assembly>
...
然后在spring-boot-maven-plugin中添加排除项,以便spring不会覆盖已经混淆的jar:
<configuration>
<mainClass>
com.yourapp.App
</mainClass>
<excludeGroupIds>com.yourgroupid</excludeGroupIds>
</configuration>
希望它对您有用!