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

时间:2019-02-23 19:45:09

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

我试图编译和混淆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项目重新打包的项目?

1 个答案:

答案 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>

希望它对您有用!