混淆方案用的proguard-maven-plugin插件。暂时这样能跑起来,有多少坑,还需要慢慢趟。
jar混淆说明
!!!一定要注意
所有的实体类和config一定要排除。用-keep
在proGuard.conf配置
修改启动类:MomBarcodeApplication.java
public static class CustomGenerator implements BeanNameGenerator {
@Override
public String generateBeanName(BeanDefinition definition, BeanDefinitionRegistry registry) {
return definition.getBeanClassName();
}
}
public static void main(String[] args) {
new SpringApplicationBuilder(MomBarcodeApplication.class)
.beanNameGenerator(new CustomGenerator())
.run(args);
}
修改 pom.xml 中 proguard-maven-plugin插件
<!-- proguard混淆插件-->
<plugin>
<groupId>com.github.wvengen</groupId>
<artifactId>proguard-maven-plugin</artifactId>
<version>2.5.1</version>
<executions>
<execution>
<!-- 打包的时候开始混淆-->
<phase>package</phase>
<goals>
<goal>proguard</goal>
</goals>
</execution>
</executions>
<configuration>
<injar>${project.build.finalName}.jar</injar>
<!--输出的jar-->
<outjar>${project.build.finalName}.jar</outjar>
<!-- 是否混淆-->
<obfuscate>true</obfuscate>
<libs>
<lib>${java.home}/jmods/</lib>
</libs>
</configuration>
</plugin>
proGuard.conf配置(跟pom.xml要在一个路径下面)
# !!! config和实体类必须要保留-keep
#指定java版本号
-target 17
#默认开启,不做收缩(删除注释、未被引用代码)
-dontshrink
#默认是开启的,这里关闭字节码级别的优化
-dontoptimize
#混淆类名之后,对使用Class.forName('className')之类的地方进行相应替代
-adaptclassstrings
#混淆时不生成大小写混合的类名
-dontusemixedcaseclassnames
#对于类成员的命名的混淆采取唯一策略
-useuniqueclassmembernames
#不忽略指定jars中的非public calsses
-dontskipnonpubliclibraryclasses
#忽略warn消息
-ignorewarnings
#忽略note消息
-dontnote
#保留继承了注释的类
-keep class * extends java.lang.annotation.Annotation {*;}
-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,*Annotation*,EnclosingMethod
#此选项将保存所有软件包中的所有原始接口文件(不进行混淆)
-keepnames interface ** { *; }
-keep interface * extends * { *; }
#保留main方法
-keepclasseswithmembers public class * {
public static void main(java.lang.String[]);
}
#此选项将保留所有原始方法参数,controller如果参数也混淆会导致传参映射不上
-keepparameternames
#保留枚举成员及方法
-keepclassmembers enum * { *; }
#入口程序类不能混淆,混淆会导致springboot启动不了
-keep class com.zxy.product.mom.xxx.MomBarcodeApplication
-keep class * implements java.io.Serializable
-keep class com.zxy.product.mom.xxx.entity.** {*;}
-keep class com.zxy.product.mom.xxx.controller.** {*;}
-keep class com.zxy.product.mom.xxx.netty.NettyConfig {*;}
-keep class com.zxy.product.mom.xxx.netty.MessageBean {*;}
-keep class com.zxy.product.mom.xxx.netty.MyNettyProperties {*;}