gpt4 book ai didi

java - 如何使用 proguard 混淆多模块 spring-boot 项目?

转载 作者:太空宇宙 更新时间:2023-11-04 09:50:23 33 4
gpt4 key购买 nike

我尝试编译和混淆 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 插件重新打包,那么混淆将会完成,但是当我尝试编译主项目时,它不会在 util 项目生成的 jar 中找到必要的符号。

那么如何对Spring boot maven项目重新打包后的项目进行混淆呢?

最佳答案

在你的主模块中声明 proguard-maven-plugin 和 spring-boot-maven-plugin (proguard 包阶段必须在 spring boot 插件重新打包目标之前执行)。仅在作为入口点的模块中声明它 - 无需在子模块或父 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>

希望它对您有用!

关于java - 如何使用 proguard 混淆多模块 spring-boot 项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54845514/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com