当前位置: 首页 > news >正文

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.lryc.cn/news/137904.html

相关文章:

  • Kafka面试
  • Amazon CloudFront 部署小指南(六)- Lambda@Edge 基础与诊断
  • centos7安装hadoop 单机版
  • 村口的人家排放污水,污水浸染了整个村子,怎么办
  • 算法leetcode|72. 编辑距离(rust重拳出击)
  • 实训笔记8.21
  • robust distortion-free watermarks for language models
  • PTS性能测试工具-使用记录
  • 【boost网络库从青铜到王者】第六篇:asio网络编程中的socket异步读(接收)写(发送)
  • django sqlite3操作和manage.py功能介绍
  • 【SQL语句】SQL编写规范
  • 后端项目开发:工具类封装(序列化、反射)
  • 软件测试技术分享丨遇到bug怎么分析?
  • LeetCode无重复字符的最长子串
  • 17.2.2 【Linux】通过systemctl观察系统上所有的服务
  • Redis扩容机制与一致性哈希算法解析
  • BDA初级分析——可视化基础
  • 边缘计算节点BEC典型实践:如何快速上手PC-Farm服务器?
  • python自动把内容发表到wordpress完整示例及错误解答
  • 【javaweb】学习日记Day6 - Mysql 数据库 DDL DML DQL
  • 如何利用SFTP如何实现更安全的远程文件传输 ——【内网穿透】
  • 枚举和反射
  • MinIO【部署 01】MinIO安装及SpringBoot集成简单测试
  • 问道管理:证券代码是什么?有什么用?
  • 中文医学知识语言模型:BenTsao
  • Java基础十四(字符串)
  • vue3 基础知识 (动态组件 keep-alive 等) 04
  • 【C# Programming】编程入门:数组、操作符、控制流
  • 线上问诊:业务数据采集
  • 2023 CCPC 华为云计算挑战赛 hdu7399 博弈,启动!(图上博弈/枚举+逆向有向图sg函数)