java spring boot项目运用proguard实现代码混淆

本文详细介绍如何在Maven项目中使用ProGuard进行Java代码混淆,包括配置pom.xml文件的具体步骤,以及如何指定不混淆的类和启动类。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

欢迎访问github

 

proguard是一款较为容易使用的java代码混淆工具,不需要其他配置,只需在pom中加入即可使用。

 

下面是具体pom

<build>
		<finalName>${artifactId}</finalName>
		<plugins>
			<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>5.3.3</proguardVersion>
					<injar>${project.build.finalName}.jar</injar>
					<outjar>${project.build.finalName}.jar</outjar>
					<obfuscate>true</obfuscate>
					<options>
						<option>-dontshrink</option>
						<option>-dontoptimize</option>
						<!-- This option will replace all strings in reflections method invocations 
							with new class names. For example, invokes Class.forName('className') -->
						<option>-adaptclassstrings</option>
						<!-- This option will save all original annotations and etc. Otherwise 
							all we be removed from files. -->
						<option>-keepattributes
							Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,LocalVariable*Table,*Annotation*,Synthetic,EnclosingMethod</option>
						<option>-keepclassmembers public class * {void set*(***);***
							get*();}</option>
						<!-- This option will save all original names in interfaces (without 
							obfuscate). -->
						<option>-keepnames interface **</option>
						<!-- This option will save all original methods parameters in files 
							defined in -keep sections, otherwise all parameter names will be obfuscate. -->
						<option>-keepparameternames</option>
						<!-- This option will save all original class files (without obfuscate) 
							but obfuscate all in domain package. -->
						<!--<option>-keep class !com.jincloud.** { *; }</option> -->
						<option>-keep
							@org.springframework.boot.autoconfigure.SpringBootApplication
							class * {*;}</option>
						<option>-keep class com.nagisa.zz.** { *; }</option>
						<!-- This option will save all original class files (without obfuscate) 
							in service package -->
						<!-- This option will save all original interfaces files (without obfuscate) 
							in all packages. -->
						<option>-keep interface * extends * { *; }</option>
						<!-- This option will save all original defined annotations in all 
							class in all packages. -->
						<option>-keepclassmembers class * {
							@org.springframework.beans.factory.annotation.Autowired *;
							@org.springframework.beans.factory.annotation.Value *;
							}
						</option>
					</options>
					<libs>
						<!-- Include main JAVA library required. -->
						<lib>${java.home}/lib/rt.jar</lib>
					</libs>
				</configuration>
				<dependencies>
					<dependency>
						<groupId>net.sf.proguard</groupId>
						<artifactId>proguard-base</artifactId>
						<version>5.3.3</version>
					</dependency>
				</dependencies>
			</plugin>

			<!-- Maven assembly must be run after proguard obfuscation so it take 
				already obfuscated files. -->
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
				<executions>
					<execution>
						<goals>
							<goal>repackage</goal>
						</goals>
						<configuration>
							<mainClass>com.nagisa.App</mainClass>
						</configuration>
					</execution>
				</executions>
			</plugin>
		</plugins>
	</build>

使用的时候只需改动两处配置

一个是指定不混淆的类,一般实体类及dao层不会加入混淆

<option>-keep class com.nagisa.zz.** { *; }</option>

还有一个

<configuration>
    <mainClass>com.nagisa.App</mainClass>
</configuration>

把项目的启动类全类名写入mainClass标签内。

启动的时候直接Run Maven Install。

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值