目录
混淆
混淆工具
proguard(具有压缩,混淆,优化代码功能,此处只用到了混淆功能) 官网地址 官网说明文档
项目目录
混淆步骤
-
maven setting.xml
修改中心库为
<mirror>
<id>alimaven</id>
<mirrorOf>central,!jitpack.io</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>
-
zhny-core模块
1.pom.xml文件新增proguard插件
<plugin>
<groupId>com.github.wvengen</groupId>
<artifactId>proguard-maven-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals><goal>proguard</goal></goals>
</execution>
</executions>
<configuration>
<proguardVersion>6.0.3</proguardVersion>
<!-- 要混淆的jar包名 -->
<injar>${project.build.finalName}.jar</injar>
<!-- 混淆之后的jar包名 -->
<outjar>${project.build.finalName}.jar</outjar>
<obfuscate>true</obfuscate>
<!-- 指定该模块是否是项目的一部分 -->
<attach>true</attach>
<!-- proguard配置文件 -->
<proguardInclude>${project.basedir}/proguard.cfg</proguardInclude>
<!-- 依赖的jar包 -->
<libs>
<lib>${java.home}/lib/rt.jar</lib>
</libs>
</configuration>
<dependencies>
<dependency>
<groupId>net.sf.proguard</groupId>
<artifactId>proguard-base</artifactId>
<version>6.0.3</version>
</dependency>
</dependencies>
</plugin>
2.pom.xml同级目录新增proguard.cfg,配置如下
# JDK目标版本1.8
-target 1.8
# 不做收缩(删除注释、未被引用代码)
-dontshrink
# 不做优化(变更代码实现逻辑)
-dontoptimize
-ignorewarnings
# 不路过非公用类文件及成员
-dontskipnonpubliclibraryclasses
-dontskipnonpubliclibraryclassmembers
# 混淆时不生成大小写混合的类名,默认是可以大小写混合
-dontusemixedcaseclassnames
# 优化时允许访问并修改有修饰符的类和类的成员
-allowaccessmodification
# 确定统一的混淆类的成员名称来增加混淆 对于类成员的命名的混淆采取唯一策略
-useuniqueclassmembernames
# 不混淆所有包名,本人测试混淆后WEB项目问题实在太多,毕竟Spring配置中有 大量固定写法的包名
-keeppackagenames
## 混淆类名之后,对使用Class.forName('className')之类的地方进行相应替代
-adaptclassstrings
#指定要保持的目录结构,默认情况下会删除所有目录以减小jar的大小。
-keepdirectories
# 不混淆所有特殊的类
-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,LocalVariable*Table,*Annotation*,Synthetic,EnclosingMethod
# This option will save all original methods parameters in files defined in -keep sections, otherwise all parameter names will be obfuscate.
#-keepparameternames
-keep interface * extends * { *; }
# 所列出到的注解不被混淆,类名会被混淆
-keepclassmembers class * {
@org.springframework.beans.factory.annotation.Autowired *;
@javax.annotation.Resource *;
@org.springframework.beans.factory.annotation.Value *;
}
# 混淆这个包下的类 此处需要更改
-keep class !com.movitech.product.zhny.** { *; }
-keep class com.movitech.product.zhny.anno.* { *; }
-keep class com.movitech.product.zhny.anno.** { *; }
-keep class com.movitech.product.zhny.base.* { *; }
-keep class com.movitech.product.zhny.base.** { *; }
-keep class com.movitech.product.zhny.common.* { *; }
-keep class com.movitech.product.zhny.common.** { *; }
-keep class com.movitech.product.zhny.enums.* { *; }
-keep class com.movitech.product.zhny.enums.** { *; }
-keep class com.movitech.product.zhny.formula.* { *; }
-keep class com.movitech.product.zhny.formula.** { *; }
-keep class com.movitech.product.zhny.infusion.message.* { *; }
-keep class com.movitech.product.zhny.infusion.message.** { *; }
-keep class com.movitech.product.zhny.lbpm.* { *; }
-keep class com.movitech.product.zhny.lbpm.** { *; }
-keep class com.movitech.product.zhny.load.* { *; }
-keep class com.movitech.product.zhny.load.** { *; }
-keep class com.movitech.product.zhny.mongodb.* { *; }
-keep class com.movitech.product.zhny.mongodb.** { *; }
-keep class com.movitech.product.zhny.mzm.* { *; }
-keep class com.movitech.product.zhny.mzm.** { *; }
-keep class com.movitech.product.zhny.mzmcache.* { *; }
-keep class com.movitech.product.zhny.mzmcache.** { *; }
-keep class com.movitech.product.zhny.project.base.* { *; }
-keep class com.movitech.product.zhny.project.base.** { *; }
-keep class com.movitech.product.zhny.project.cache.* { *; }
-keep class com.movitech.product.zhny.project.cache.** { *; }
-keep class com.movitech.product.zhny.project.calc.* { *; }
-keep class com.movitech.product.zhny.project.calc.** { *; }
-keep class com.movitech.product.zhny.project.energy.storage.* { *; }
-keep class com.movitech.product.zhny.project.energy.storage.** { *; }
-keep class com.movitech.product.zhny.project.eval.* { *; }
-keep class com.movitech.product.zhny.project.eval.** { *; }
-keep class com.movitech.product.zhny.project.install.service.* { *; }
-keep class com.movitech.product.zhny.project.install.service.impl.ProjectInstallDetailsImpl { *; }
-keep class com.movitech.product.zhny.project.install.service.impl.ProjectInstallDeviceSplitServiceImpl { *; }
-keep class com.movitech.product.zhny.project.install.service.impl.ProjectKezaishengInstallSchemeServiceImpl { *; }
-keep class com.movitech.product.zhny.project.install.service.impl.ProjectInstallSchemeServiceImpl
-keep class com.movitech.product.zhny.project.load.* { *; }
-keep class com.movitech.product.zhny.project.load.** { *; }
-keep class com.movitech.product.zhny.project.model.* { *; }
-keep class com.movitech.product.zhny.project.model.** { *; }
-keep class com.movitech.product.zhny.project.power.tech.* { *; }
-keep class com.movitech.product.zhny.project.power.tech.** { *; }
-keep class com.movitech.product.zhny.project.price.* { *; }
-keep class com.movitech.product.zhny.project.price.** { *; }
-keep class com.movitech.product.zhny.project.rengongGanyu.* { *; }
-keep class com.movitech.product.zhny.project.rengongGanyu.** { *; }
-keep class com.movitech.product.zhny.project.resource.* { *; }
-keep class com.movitech.product.zhny.project.resource.** { *; }
-keep class com.movitech.product.zhny.project.run.* { *; }
-keep class com.movitech.product.zhny.project.run.service.* { *; }
-keep class com.movitech.product.zhny.project.run.service.impl.ProjectRunServiceImpl
-keep class com.movitech.product.zhny.project.share.* { *; }
-keep class com.movitech.product.zhny.project.share.** { *; }
-keep class com.movitech.product.zhny.project.subsidy.* { *; }
-keep class com.movitech.product.zhny.project.subsidy.** { *; }
-keep class com.movitech.product.zhny.project.tech.road.comp.service.* { *; }
-keep class com.movitech.product.zhny.project.tech.road.comp.service.impl.AsyncLiangHuaBiXuanServiceImpl { *; }
-keep class com.movitech.product.zhny.project.tech.road.comp.service.impl.AsyncProjectService { *; }
-keep class com.movitech.product.zhny.project.tech.road.comp.service.impl.ProjectTechRoadCompPriceService { *; }
-keep class com.movitech.product.zhny.project.tech.road.comp.service.impl.ProjectTechRoadCompTechRoadServiceImpl
-keep class com.movitech.product.zhny.project.tech.road.comp.service.impl.ProjectTechRoadCompServiceImpl
-keep class com.movitech.product.zhny.project.tech.road.service.* { *; }
-keep class com.movitech.product.zhny.project.tech.road.service.** { *; }
-keep class com.movitech.product.zhny.**.entity.** { *; }
-keep class com.movitech.product.zhny.**.dao.** { *; }
-keep class com.movitech.product.zhny.**.model.** { *; }
-keep class com.movitech.product.zhny.**.mode.** { *; }
-keep class com.movitech.product.zhny.**.event.** { *; }
-keep class com.movitech.product.zhny.**.callback.** { *; }
-keep class com.movitech.product.zhny.**.util.** { *; }
-keep class com.movitech.product.zhny.**.config.** { *; }
-keep class com.movitech.product.zhny.**.enums.** { *; }
-keep class com.movitech.product.zhny.**.scheme.** { *; }
# 指定摸个方法不被混淆
#-keep class !com.movitech.product.zhny.project.tech.road.comp.service.impl.ProjectTechRoadCompServiceImpl{
# public com.movitech.product.zhny.project.tech.road.scheme.model.LhbxResult update(com.movitech.product.zhny.project.tech.road.comp.model.LiangHuaBiXuanModel);
#}
# 指定Keep类名不被混淆,类中的方法和成员仍然会被混淆
#-keep class com.movitech.product.zhny.project.calc.service.NyProCalcParamService
# 指定Keep类名不被混淆,且Keep的sayHello方法和成员helloStr不被混淆
#-keep class com.movitech.product.zhny.project.calc.service.impl.NyProCalcParamServiceImpl {
# public void update(com.movitech.product.zhny.project.calc.entity.NyProCalcParamEntity);
## private static final java.lang.String helloStr;
#}
-dontwarn **
# 不混淆main方法
#-keep class com.movitech.ZhnyApiApplication { *; }
# 不混淆所有的set/get方法,毕竟项目中使用的部分第三方框架(例如Shiro)会用到大量的set/get映射
#-keepclassmembers public class * {void set*(***);*** get*();}
# 不对包类的类名进行混淆,但对类中的属性和方法混淆
# 不混淆包下的所有类名,且类中的方法和属性也不混淆
-
zhny-api模块
在引用zhny-core的地方新增标签 <classifier>small</classifier>
修改完后的变化为:比如之前引用的为zhny-core-zhny-1.0.0-SNAPSHOT.jar,增加后则引用jar为zhny-core-zhny-1.0.0-SNAPSHOT-small.jar
注:small是默认生成,若需要修改,则在zhny-core的<attach/>标签下方增加 <attachArtifactClassifier>自定义名称</attachArtifactClassifier> 标签,此标签作用为指定生成文件分类,增加完后将<classifier/>处也改成自定义名称
参考博客地址
Spring boot多模块项目使用proguard实现代码混淆
Spring boot使用ProGuard实现代码混淆-单模块
加密
加密工具
xjar github地址及详细说明文档
注:github已有完整文档,此处不再赘述
友情提示:xjar加密过程不需要go环境,但是的加密后的jar包运行需要安装go环境(即运行服务器需要go环境)