ProGuard + SpringBoot3 + JDK17

1、pom依賴

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.0.5</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.tj.hoo</groupId><artifactId>pro-guard-demo</artifactId><version>0.0.1</version><name>ProGuard-Demo</name><properties><java.version>17</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.11.0</version><configuration><source>${java.version}</source><target>${java.version}</target><compilerVersion>${java.version}</compilerVersion><compilerArgs>--enable-preview</compilerArgs></configuration></plugin><plugin><groupId>com.github.wvengen</groupId><artifactId>proguard-maven-plugin</artifactId><version>2.6.0</version><executions><!--以下配置說明執行mvn的package命令時候,會執行proguard--><execution><phase>package</phase><goals><goal>proguard</goal></goals></execution></executions><configuration><!--輸入jar--><injar>${project.build.finalName}.jar</injar><!--輸出jar--><outjar>${project.build.finalName}.jar</outjar><!--是否混淆--><obfuscate>true</obfuscate><!--配置文件--><proguardInclude>${project.basedir}/proguard.cfg</proguardInclude><!--額外的依賴--><!--<libs><lib></lib></libs>--><!--對輸入jar繼續過濾--><inLibsFilter>!META-INF/**</inLibsFilter><!--輸出路徑配置--><outputDirectory>${project.basedir}/target</outputDirectory><!--混淆的一些細節選項--><!--<options><option></option></options>--></configuration></plugin><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><excludes><exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></exclude></excludes></configuration></plugin></plugins></build>
</project>

2、ProGuard配置

# 指定Java的版本
-target 17
# proguard會對代碼進行優化壓縮,他會刪除從未使用的類或者類成員變量等
-dontshrink
# 是否關閉字節碼級別的優化,如果不開啟則設置如下配置
-dontoptimize
# 混淆時不生成大小寫混合的類名,默認是可以大小寫混合
-dontusemixedcaseclassnames
# 對于類成員的命名的混淆采取唯一策略
-useuniqueclassmembernames
# 混淆時不生成大小寫混合的類名,默認是可以大小寫混合
-dontusemixedcaseclassnames
# 混淆類名之后,對使用Class.forName('className')之類的地方進行相應替代
-adaptclassstrings# 對異常、注解信息予以保留
-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,*Annotation*,EnclosingMethod
# 此選項將保存接口中的所有原始名稱(不混淆)-->
-keepnames interface ** { *; }
# 此選項將保存所有軟件包中的所有原始接口文件(不進行混淆)
#-keep interface * extends * { *; }
# 保留參數名,因為控制器,或者Mybatis等接口的參數如果混淆會導致無法接受參數,xml文件找不到參數
-keepparameternames
# 保留枚舉成員及方法
-keepclassmembers enum * { *; }
# 不混淆所有類,保存原始定義的注釋-
-keepclassmembers class * {@org.springframework.context.annotation.Bean *;@org.springframework.beans.factory.annotation.Autowired *;@org.springframework.beans.factory.annotation.Value *;@org.springframework.stereotype.Service *;@org.springframework.stereotype.Component *;}# 忽略warn消息
-ignorewarnings
# 指定不打印有關配置中潛在錯誤或遺漏的注釋,例如類名中的拼寫錯誤或缺少可能有用的選項
-dontnote com.tj.hoo.proguard.demo.ProGuardDemoApplication
# 打印配置信息
-printconfiguration
-keep public class com.tj.hoo.proguard.demo.ProGuardDemoApplication {public static void main(java.lang.String[]);}

3、測試代碼

package com.tj.hoo.proguard.demo;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class ProGuardDemoApplication {public static void main(String[] args) {SpringApplication.run(ProGuardDemoApplication.class, args);}}
package com.tj.hoo.proguard.demo.controller;import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.Collections;
import java.util.Map;@RestController
@RequestMapping("/index")
public class IndexController {@GetMapping("/test01")public Map<String, Object> test01() {return Collections.singletonMap("name", "Jack");}}

4、命令

????????不支持JDK20,否則報錯:[ERROR] Failed to execute goal com.github.wvengen:proguard-maven-plugin:2.6.0:proguard (default) on project pro-guard-demo: Obfuscation failed (result=1) -> [Help 1]

mvn clean package -Dmaven.test.skip=true

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/43083.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/43083.shtml
英文地址,請注明出處:http://en.pswp.cn/news/43083.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

android平臺的語音聊天助手源碼

目錄 1 android平臺的語音聊天助手源碼 1.1 Setting 1.1.1 onChildClick 1.1.2 if (groupPosition == 0) {// 語音識別設置 android平臺的語音聊天助手源碼 Setting onChildClick

神經網絡基礎-神經網絡補充概念-11-向量化邏輯回歸

概念 通過使用 NumPy 數組來進行矩陣運算&#xff0c;將循環操作向量化。 向量化的好處在于它可以同時處理多個樣本&#xff0c;從而加速計算過程。在實際應用中&#xff0c;尤其是處理大規模數據集時&#xff0c;向量化可以顯著提高代碼的效率。 代碼實現-以邏輯回歸為例 i…

邊緣網絡的作用及管理工具

自從引入軟件即服務 &#xff08;SaaS&#xff09; 以來&#xff0c;它一直引領著全球按需軟件部署創新的競賽&#xff0c;它提供的靈活性以及其云計算架構帶來的易于集成使其成為交付業務應用程序的標準。 在 SaaS 模型中&#xff0c;最佳用戶體驗的三重奏涉及無縫設置、低延…

JMeter 特殊組件-邏輯控制器與BeanShell PreProcessor 使用示例

文章目錄 前言JMeter 特殊組件-邏輯控制器與BeanShell PreProcessor 使用示例1. 邏輯控制器使用1.1. While Controller 使用示例1.2. 如果&#xff08;If&#xff09;控制器 使用示例 2. BeanShell PreProcessor 使用示例 前言 如果您覺得有用的話&#xff0c;記得給博主點個贊…

Java課題筆記~ SpringBoot簡介

1. 入門案例 問題導入 SpringMVC的HelloWord程序大家還記得嗎&#xff1f; SpringBoot是由Pivotal團隊提供的全新框架&#xff0c;其設計目的是用來簡化Spring應用的初始搭建以及開發過程 原生開發SpringMVC程序過程 1.1 入門案例開發步驟 ①&#xff1a;創建新模塊&#…

設計模式-過濾器模式(使用案例)

過濾器模式&#xff08;Filter Pattern&#xff09;或標準模式&#xff08;Criteria Pattern&#xff09;是一種設計模式&#xff0c;這種模式允許開發人員使用不同的標準來過濾一組對象&#xff0c;通過邏輯運算以解耦的方式把它們連接起來。這種類型的設計模式屬于結構型模式…

服務器安裝centos7踩坑

1、制作啟動工具 下載iso https://developer.aliyun.com/mirror/?spma2c6h.25603864.0.0.20387abbo2RFbn http://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/?spma2c6h.25603864.0.0.1995f5ad4AhJaW下載 UltraISO https://cn.ultraiso.net/插入u盤啟動 到了如圖所示頁面…

nginx php-fpm安裝配置

nginx php-fpm安裝配置 nginx本身不能處理PHP&#xff0c;它只是個web服務器&#xff0c;當接收到請求后&#xff0c;如果是php請求&#xff0c;則發給php解釋器處理&#xff0c;并把結果返回給客戶端。 nginx一般是把請求發fastcgi管理進程處理&#xff0c;fascgi管理進程選…

架構演進及常用架構

1架構演進及常用架構 1.1單體分層架構 1.2 多應用微服務架構 1.3 分布式集群部署 部署 CDN 節點&#xff1a; 用戶訪問量的增加意味著用戶地域的分散請求&#xff0c;如果所有請求都直接發送中心服務器的話&#xff0c;距離越遠&#xff0c;響應速度越差&#xff0c;這時就需…

【編織時空四:探究順序表與鏈表的數據之旅】

本章重點 鏈表的分類 帶頭雙向循環鏈表接口實現 順序表和鏈表的區別 緩存利用率參考存儲體系結構 以及 局部原理性。 一、鏈表的分類 實際中鏈表的結構非常多樣&#xff0c;以下情況組合起來就有8種鏈表結構&#xff1a; 1. 單向或者雙向 2. 帶頭或者不帶頭 3. 循環或者非…

yolov5封裝進ros系統

一&#xff0c;要具備ROS環境 ROS環境搭建可以參考我之前的文章 ROS參考文章1 ROS參考文章2 ? 建立ROS工作空間 ROS系統由自己的編譯空間規則。 cd 你自己想要的文件夾&#xff08;我一般是home目錄&#xff09; mkdir -p (你自己的文件夾名字&#xff0c;比如我是yolov5…

C++的stack和queue+優先隊列

文章目錄 什么是容器適配器底層邏輯為什么選擇deque作為stack和queue的底層默認容器優先隊列優先隊列的模擬實現stack和queue的模擬實現 什么是容器適配器 適配器是一種設計模式(設計模式是一套被反復使用的、多數人知曉的、經過分類編目的、代碼設計經驗的總 結)&#xff0c;…

Greenplum多級分區表添加分區報錯ERROR: no partitions specified at depth 2

一般來說&#xff0c;我們二級分區表都會使用模版&#xff0c;如果沒有使用模版特性&#xff0c;那么就會報ERROR: no partitions specified at depth 2類似的錯誤。因為沒有模版&#xff0c;必須要顯式指定分區。 當然我們在建表的時候&#xff0c;如果沒有指定&#xff0c;那…

PyTorch訓練深度卷積生成對抗網絡DCGAN

文章目錄 DCGAN介紹代碼結果參考 DCGAN介紹 將CNN和GAN結合起來&#xff0c;把監督學習和無監督學習結合起來。具體解釋可以參見 深度卷積對抗生成網絡(DCGAN) DCGAN的生成器結構&#xff1a; 圖片來源&#xff1a;https://arxiv.org/abs/1511.06434 代碼 model.py impor…

VSCode 使用總結

快捷鍵 在 Visual Studio Code (VSCode) 中&#xff0c;有許多常用的快捷鍵可以提高編程效率。以下是一些常見的 VSCode 編程項目快捷鍵&#xff1a; 編輯器操作&#xff1a; 撤銷&#xff1a;Ctrl Z重做&#xff1a;Ctrl Shift Z復制&#xff1a;Ctrl C剪切&#xff1a;C…

Electron入門,項目啟動。

electron 簡單介紹&#xff1a; 實現&#xff1a;HTML/CSS/JS桌面程序&#xff0c;搭建跨平臺桌面應用。 electron 官方文檔&#xff1a; [https://electronjs.org/docs] 本文是基于以下2篇文章且自行實踐過的&#xff0c;可行性真實有效。 文章1&#xff1a; https://www.cnbl…

題解 | #1005.List Reshape# 2023杭電暑期多校9

1005.List Reshape 簽到題 題目大意 按一定格式給定一個純數字一維數組&#xff0c;按給定格式輸出成二維數組。 解題思路 讀入初始數組字符串&#xff0c;將每個數字分離&#xff0c;按要求輸出即可 參考代碼 參考代碼為已AC代碼主干&#xff0c;其中部分功能需讀者自行…

學習Vue:組件通信

組件化開發在現代前端開發中是一種關鍵的方法&#xff0c;它能夠將復雜的應用程序拆分為更小、更可管理的獨立組件。在Vue.js中&#xff0c;父子組件通信是組件化開發中的重要概念&#xff0c;同時我們還會討論其他組件間通信的方式。 父子組件通信&#xff1a;Props 和 Events…

TDSQL赤兔管理臺無管理員用戶密碼解決方案

解決方案 問題描述&#xff1a; tdsql使用過程中&#xff0c;可能會遇到控制臺用戶密碼忘記的情況&#xff0c;用戶登錄次數過多被鎖的情況&#xff0c;沒有管理員的用戶密碼又急需某些權限的情況。 解決過程&#xff1a; 獲取配置庫信息&#xff1a; 在瀏覽器上打開如下命…

基于Javaweb的攝影作品網站/攝影網站

摘 要 隨著信息化時代的到來&#xff0c;系統管理都趨向于智能化、系統化&#xff0c;攝影作品網站也不例外&#xff0c;但目前國內的有些網站仍然都使用人工管理&#xff0c;瀏覽網站人數越來越多&#xff0c;同時信息量也越來越龐大&#xff0c;人工管理顯然已無法應對時代的…