背景:將jar包部署到其他伺服器,如何保證自己的jar不會被反編譯解密
一、如何打包成加密的jar
1、在pom檔案中,新增這兩項
A、
<dependency> <groupId>net.roseboy</groupId> <artifactId>classfinal-maven-plugin</artifactId> <version>1.2.1</version> </dependency>
B、
<plugin> <!-- 【1】加密後,方法體被清空,保留方法引數、註解等資訊;是為了相容spring、swagger等掃描註解的框架 【2】方法體被清空後,反編譯者只看到方法名和註解,看不到方法的具體內容 【3】加密後的專案需要設定javaagent來啟動,啟動過程中解密class,完全記憶體解密,不留下任何解密後的檔案 【啟動加密的Jar】: 生成 xxx-encrypted.jar,這個就是加密後的jar檔案:加密後的檔案不可執行 無密碼:需要java -javaagent:xxx-encrypted.jar -jar xxx-encrypted.jar 有密碼:java -javaagent:xxx -encrypted.jar = '-pwd 000000' -jar xxx-encrypted.jar --> <groupId>net.roseboy</groupId> <artifactId>classfinal-maven-plugin</artifactId> <version>1.2.1</version> <configuration> <password>#</password> <!--加密密碼,如果是#號,則使用無密碼模式加密--> <packages>com.bk</packages> <!--加密的包名(可為空,多個用“,”分割)--> </configuration> <executions> <execution> <phase>package</phase> <goals> <goal>classFinal</goal> </goals> </execution> </executions> </plugin>
這樣打包出來的jar,反編譯看到class檔案,不能看到方法體裡面的內容,只能看到方法名稱
二、如何執行加密的jar
java -javaagent:D:\custom-server\test-server-1.0.0.jar -jar D:\custom-server\test-server-1.0.0.jar