公司让研究一下java代码混淆相关的东西,随即搜索能做代码混淆的相关工具,于是发现了proguard,经过两天时间的研究与试验才将代码混淆做好并解决构建后发现的问题。下面是一些过程中遇到的几个问题。
混淆执行生命周期:该项目在maven中配置了一个插件,在process-classes周期中将一部分代码单独打成另外一个jar包,并且将该jar包复制到lib目录。
如果在package阶段进行混淆,会导致单独打出来的jar没有被混淆(当然应该也可以配置option指定将lib中的jar包进行混淆,我没有这么试过),所以我将混淆的生命周期同样设为了process-classes并放到同属于该周期的插件的最前面,将字节码文件进行混淆之后再进行其他操作。在process-classes是进行混淆并输出到classes文件夹还有个好处,方便直接用idea启动项目进行调试。
java.sql.SQLException: Column 'j' not found:Entity类中的属性也被混淆了,由于hibernate属性映射列名,导致进行查询的时候找不到对应的列名。所以要混淆避免Entity类,-keep class **.model.**{*},这里根据自己的Entity类的路径填写即可。
Bean的名字冲突:不同包下的类文件可能会混淆出同名的字节码文件,当spring注册bean的时候,beanname默认是类名。更改beanname的生成策略,可以改为全类名。生成全类名之后,项目中有一段代码也报错了,SpringContextHolder.getBean(“xxx”),参数修改为xxx.class.getName()。
暂时就这么多了。过程中还遇到一些其他问题,做的时候忘记了记录,现在也想不起来了,就先把还有印象的先写下来。
ProGuard Manual: Home | Guardsquare,proguard的官网手册。
标签:混淆,java,代码,jar,Entity,Proguard,classes From: https://www.cnblogs.com/eva1/p/16806065.html