ProGuard Spring Boot Maven 插件
ProGuard + Spring Boot + Maven Plugin
伙计们,我正在尝试使用 proguard-maven-plugin 混淆 .jar 应用程序。
当我尝试执行混淆过程时,我收到错误消息,指出存在意外的类。
我正在使用 Spring Boot 1.4.1.RELEASE 和 Proguard Maven 插件 2.0.13。
这是我的 proguard.conf
|
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
-injars /workspace/base/target/test-1.0.0.jar
-libraryjars /Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/jre/lib/rt.jar -dontshrink -adaptresourcefilenames **.properties -dontpreverify
-keepclasseswithmembers public class * { -keepclassmembers enum * { -keep class * extends java.beans.BeanInfo -keep class * { -assumenosideeffects public class java.lang.System { |
pom.xml 文件。我只是通过插件通知配置。
|
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
<plugin>
<groupId>com.github.wvengen</groupId> proguard-maven-plugin</artifactId> <version>2.0.13</version> <executions> <execution> <phase>package</phase> <goals> <goal>proguard</goal> </goals> </execution> </executions> <configuration> <obfuscate>false</obfuscate> <outFilter>**/BOOT-INF/classes/ **.class</outFilter> <proguardInclude>${basedir}/proguard.conf</proguardInclude> <injar>${project.build.finalName}.jar</injar> |
但是,在执行过程中,我的应用程序中的所有类都会得到以下返回。
|
1
2 3 |
Warning: class [BOOT-INF/classes/br/com/base/BaseApplication.class] unexpectedly contains class [br.com.base.BaseApplication]
Warning: class [BOOT-INF/classes/br/com/base/controller/CaixaController.class] unexpectedly contains class [br.com.base.controller.CaixaController] [...] |
以及 ProGuard 的最终输出。 PS:所有类都在BOOT-INF/classes目录
|
1
2 3 4 5 6 7 |
Warning: there were 97 classes in incorrectly named files.
You should make sure all file names correspond to their class names. The directory hierarchies must correspond to the package hierarchies. (http://proguard.sourceforge.net/manual/troubleshooting.html#unexpectedclass) If you don't mind the mentioned classes not being written out, you could try your luck using the '-ignorewarnings' option. Please correct the above warnings first. |
谁能想象我可以尝试的任何替代方案?
谢谢。
为了解决这个问题,我确保更改了 pom.xml 中插件的顺序。 proguard 插件应该放在第一位,然后是 spring boot 插件。
此外,请确保您在 spring boot 配置中指定了 <goal>repackage</goal>。使用正确的顺序和指定的重新打包目标,proguard 混淆/优化/您配置的任何内容都会发生并生成一个 jar。然后 spring boot 插件会将该 jar 重新打包为可执行文件,一切都应该正常工作。
我的插件配置来自 pom.xml:
|
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
<project ...>
.... <plugin> <groupId>com.github.wvengen</groupId> proguard-maven-plugin</artifactId> <executions> <execution> <phase>package</phase> <goals> <goal>proguard</goal> </goals> </execution> </executions> <configuration> <proguardInclude>${basedir}/proguard.conf</proguardInclude> <libs> <lib>${java.home}/lib/rt.jar</lib> <lib>${java.home}/lib/jce.jar</lib> </libs> </configuration> </plugin> <plugin> <groupId>org.springframework.boot</groupId> spring-boot-maven-plugin</artifactId> <executions> <execution> <goals> <goal>repackage</goal> </goals> <configuration> <start-class>org.springframework.boot.loader.JarLauncher</start-class> </configuration> </execution> </executions> </plugin> ... |
相关讨论
- 当您的 Spring Boot 应用程序是多模块时,您如何包含其他模块?