【问题标题】:How to obfuscate multi-module spring-boot project with proguard?如何使用 proguard 混淆多模块 spring-boot 项目?
【发布时间】:2019-09-17 01:30:19
【问题描述】:

我尝试编译和混淆 2 个项目,其中一个依赖于另一个,并且两者都是使用 Spring boot maven 插件构建的。

为了简单起见,我们称它们为 main 和 util 项目。

构建有两个阶段。在第一阶段,构建了 util 项目。第二阶段主要项目依赖于util项目。

我的问题是 Spring boot maven 插件创建了嵌套的 jars。 (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 项目重新打包的项目呢?

【问题讨论】:

  • 发布您的 proguard 配置可能会有所帮助。
  • 也许proguard配置不是那么重要。更重要的部分是this。这就是如果使用 Spring boot maven 插件进行重新打包,混淆不起作用的原因。

标签: java spring-boot proguard multi-module spring-boot-maven-plugin


【解决方案1】:

在你的主模块中声明 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>

希望它对你有用!

【讨论】:

  • 十亿。你救了我!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多