上文已实现打出可执行的jar包,在原来pom基础上,加入的配置即可。
<plugin> <groupId>com.github.wvengen</groupId> <artifactId>proguard-maven-plugin</artifactId> <version>2.0.13</version> <executions> <execution> <phase>package</phase> <goals> <goal>proguard</goal> </goals> </execution> </executions> <configuration> <attach>true</attach> <attachArtifactClassifier>pg</attachArtifactClassifier> <!-- attach 的作用是在 install 与 deploy 时将生成的 pg 文件也安装与部署 --> <options> <!-- 详细配置方式参考 ProGuard 官方文档 --> <!--<option>-dontobfuscate</option>--> <option>-ignorewarnings</option> <!--忽略所有告警--> <option>-dontshrink</option> <!--不做 shrink --> <option>-dontoptimize</option> <!--不做 optimize --> <option>-dontskipnonpubliclibraryclasses</option> <option>-dontskipnonpubliclibraryclassmembers</option> <option>-repackageclasses com.lwf.proguard.example.project2.pg</option> <!--平行包结构(重构包层次),所有混淆的类放在 pg 包下--> <!-- 以下为 Keep,哪些内容保持不变,因为有一些内容混淆后(a,b,c)导致反射或按类名字符串相关的操作失效 --> <option>-keep class **.package-info</option> <option>-keep class **.TestClass { *;}</option> <!--保持包注解类--> <option>-keepattributes Signature</option> <!--JAXB NEED,具体原因不明,不加会导致 JAXB 出异常,如果不使用 JAXB 根据需要修改--> <!-- Jaxb requires generics to be available to perform xml parsing and without this option ProGuard was not retaining that information after obfuscation. That was causing the exception above. --> <option>-keepattributes SourceFile,LineNumberTable,*Annotation*</option> <!--保持源码名与行号(异常时有明确的栈信息),注解(默认会过滤掉所有注解,会影响框架的注解)--> <option>-keepclassmembers enum com.lwf.proguard.example.project2.** { *;}</option> <!--保持枚举中的名子,确保枚举 valueOf 可以使用--> <option>-keep class com.lwf.proguard.example.project2.bean.** { *;}</option> <!--保持 Bean 类,(由于很多框架会对 Bean 中的内容做反射处理,请根据自己的业务调整) --> <option>-keep class com.lwf.proguard.example.project2.Project2 { public void init(); public void destroy(); } </option> <!-- 保持对外的接口性质类对外的类名与方法名不变 --> </options> <outjar>${project.build.finalName}-pg</outjar> <libs> <lib>${java.home}/lib/rt.jar</lib> </libs> </configuration> </plugin>
pom文件全文如下:
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.lwf.MavenPackage</groupId> <artifactId>MavenPackage</artifactId> <version>0.0.1-SNAPSHOT</version> <name>MavenPackage</name> <dependencies> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> <dependency> <groupId>fbcds</groupId> <artifactId>fbcds</artifactId> <version>1.0</version> </dependency> <dependency> <groupId>ojdbc7</groupId> <artifactId>ojdbc7</artifactId> <version>1.0</version> </dependency> </dependencies> <build> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>2.3.2</version> <configuration> <source>1.7</source> <target>1.7</target> <encoding>UTF-8</encoding> <compilerArguments> <extdirs>.\lib</extdirs> </compilerArguments> </configuration> </plugin> <!-- 方法一:使用 maven-shade-plugin插件打可执行包--> <!-- <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>2.4.3</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <mainClass>com.lwf.test.TestClass</mainClass> </transformer> </transformers> </configuration> </execution> </executions> </plugin> --> <!-- 方法二:使用 maven-Assembly-plugin插件打可执行包--> <!-- <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>2.6</version> <configuration> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> <archive> <manifest> <mainClass>com.lwf.test.TestClass</mainClass> </manifest> </archive> </configuration> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin> --> <!-- 方法三:使用 onejar-maven-plugin插件打可执行包--> <!-- <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <configuration> <archive> <manifest> <mainClass>com.lwf.test.TestClass</mainClass> </manifest> </archive> </configuration> </plugin> <plugin> <groupId>com.jolira</groupId> <artifactId>onejar-maven-plugin</artifactId> <version>1.4.4</version> <executions> <execution> <configuration> <attachToBuild>true</attachToBuild> <classifier>onejar</classifier> </configuration> <goals> <goal>one-jar</goal> </goals> </execution> </executions> </plugin> --> <!-- 方法四:使用maven-jar-plugin和maven-dependency-plugin打可执行包,引用的包放包外面文件夹下 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <configuration> <excludes> <exclude>**/log4j.properties</exclude> </excludes> <archive> <!-- 包里面是否包含pom.xml文件和pom.properties文件 --> <addMavenDescriptor>false</addMavenDescriptor> <manifest> <addClasspath>true</addClasspath> <mainClass>com.lwf.test.TestClass</mainClass> <classpathPrefix>lib/</classpathPrefix> </manifest> </archive> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>2.5.1</version> <executions> <execution> <id>copy-dependencies</id> <phase>package</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <!-- exclude junit, we need runtime dependency only --> <includeScope>runtime</includeScope> <outputDirectory>${project.build.directory}/lib/</outputDirectory> </configuration> </execution> </executions> </plugin> <plugin> <groupId>com.github.wvengen</groupId> <artifactId>proguard-maven-plugin</artifactId> <version>2.0.13</version> <executions> <execution> <phase>package</phase> <goals> <goal>proguard</goal> </goals> </execution> </executions> <configuration> <attach>true</attach> <attachArtifactClassifier>pg</attachArtifactClassifier> <!-- attach 的作用是在 install 与 deploy 时将生成的 pg 文件也安装与部署 --> <options> <!-- 详细配置方式参考 ProGuard 官方文档 --> <!--<option>-dontobfuscate</option>--> <option>-ignorewarnings</option> <!--忽略所有告警--> <option>-dontshrink</option> <!--不做 shrink --> <option>-dontoptimize</option> <!--不做 optimize --> <option>-dontskipnonpubliclibraryclasses</option> <option>-dontskipnonpubliclibraryclassmembers</option> <option>-repackageclasses com.lwf.proguard.example.project2.pg</option> <!--平行包结构(重构包层次),所有混淆的类放在 pg 包下--> <!-- 以下为 Keep,哪些内容保持不变,因为有一些内容混淆后(a,b,c)导致反射或按类名字符串相关的操作失效 --> <option>-keep class **.package-info</option> <option>-keep class **.TestClass { *;}</option> <!--保持包注解类--> <option>-keepattributes Signature</option> <!--JAXB NEED,具体原因不明,不加会导致 JAXB 出异常,如果不使用 JAXB 根据需要修改--> <!-- Jaxb requires generics to be available to perform xml parsing and without this option ProGuard was not retaining that information after obfuscation. That was causing the exception above. --> <option>-keepattributes SourceFile,LineNumberTable,*Annotation*</option> <!--保持源码名与行号(异常时有明确的栈信息),注解(默认会过滤掉所有注解,会影响框架的注解)--> <option>-keepclassmembers enum com.lwf.proguard.example.project2.** { *;}</option> <!--保持枚举中的名子,确保枚举 valueOf 可以使用--> <option>-keep class com.lwf.proguard.example.project2.bean.** { *;}</option> <!--保持 Bean 类,(由于很多框架会对 Bean 中的内容做反射处理,请根据自己的业务调整) --> <option>-keep class com.lwf.proguard.example.project2.Project2 { public void init(); public void destroy(); } </option> <!-- 保持对外的接口性质类对外的类名与方法名不变 --> </options> <outjar>${project.build.finalName}-pg</outjar> <libs> <lib>${java.home}/lib/rt.jar</lib> </libs> </configuration> </plugin> </plugins> </build> </project>
具体见附件项目文件。
相关推荐
修改proguard-maven-plugin插件默认可以对proguard打包后的jar重新打包
3. 执行构建:运行`mvn package`命令,Maven会自动调用ProGuard并将混淆后的结果打包进最终的jar或war文件。 在实际操作中,可能会遇到一些问题,如类找不到、配置文件错误等。解决这些问题的关键在于正确配置...
本篇文章将详细探讨如何在一个Spring Boot的Maven工程中集成并使用ProGuard进行代码混淆。 首先,让我们理解什么是代码混淆。代码混淆是指将源代码中的类名、方法名和变量名替换为无意义的简短名称,同时保持代码的...
基于SpringBoot+Maven多模块工程利用proguard组件实现代码混淆的代码demo,代码清晰完整,导入idea或eclipse即可...详细实现步骤可查阅本人博客文章《SpringBoot + proguard+maven多模块实现代码混淆》,有详细描述。
**ProGuard Maven插件**是Java开发者在Maven构建流程中使用的一个重要工具,它主要负责执行代码混淆、优化、压缩和预校验等任务。这个插件是针对ProGuard工具的集成,使得在Maven项目中应用ProGuard变得更加便捷。...
构建项目时,ProGuard将自动应用你的配置和规则,以确保生成的APK文件是混淆和优化过的。 这份ZIP文件旨在帮助你轻松地加强你的应用程序安全性和性能。如果你是一个关心应用程序质量的开发者,这个资源将为你提供所...
maven-plugin-2.2.0_1.jar
ProGuard是一款强大的Java类文件混淆、优化、压缩和预校验工具,它能够帮助我们实现这个目标。 本案例是一个Spring Boot单个Maven工程,通过ProGuard实现代码混淆的实践示例。首先,我们需要了解ProGuard的基本配置...
在`pom.xml`文件中,我们需要添加`maven-jar-plugin`插件来打包Java项目。以下是一个基本的配置示例: ```xml <plugin> <groupId>org.apache.maven.plugins <artifactId>maven-jar-plugin <version>3.2.0...
该插件使您可以使用ProGuard开源混淆器来混淆Maven工件,ProGuard开源混淆器是一种非常强大且完善的Java混淆器。 也可以在SourceForge的http://proguard.sourceforge.net/上找到ProGuard。 可以从您的POM使用此插件...
在命令行中,执行`mvn package`命令,Maven会按照pom.xml中的配置执行编译和混淆操作,最终生成混淆后的jar文件。 对于Android项目,由于使用了Gradle构建系统,混淆通常在`build.gradle`文件中配置,但原理与上述...
将ProGuard与Maven结合使用,可以让开发者在Maven的构建流程中自动化执行代码混淆、优化等操作,简化了整个过程。下面我们将详细探讨如何在Maven项目中配置和使用ProGuard。 首先,要在Maven项目中引入ProGuard,...
在IT行业中,开发Java应用程序时,我们经常需要将代码打包成可执行的JAR文件,以便于部署和分发。本教程将详细讲解如何在IntelliJ IDEA(IDEA)中利用Maven进行混淆打包,确保代码的安全性并提高可维护性。 首先,...
科尔多瓦插件保护 Cordova插件可激活ProGuard和缩小功能,以... cordova plugin add cordova-plugin-proguard此命令将配置您的build.gradle文件并将proguard-custom.txt复制到${androidPlatformDirectory}/assets/www
ProGuard是一个压缩、优化和混淆Java字节码文件的免费的工具,它可以删除无用的类、字段、方法和属性。可以删除没用的注释,最大限度地优化字节码文件。它还可以使用简短的无意义的名称来重命名已经存在的类、字段、...
在proguard-maven-plugin的基础上修改而来,可以在项目构建过的时候把代码混淆,支持打成jar包和war包。 基本支持Proguard的所有功能。 博客地址: ##使用方法 先进行Maven install 然后在需要混淆代码的工程中加入...
混淆技术是软件开发中的一种策略,主要目的是为了保护代码不被轻易理解和篡改,特别是在开源或者需要发布可执行文件的场景中。在Java世界里,这一技术常用于Android应用开发,但也适用于桌面应用和其他Java项目。...
proguard可以用两种方式实现加密打包。 1、使用proguard工具,...2、嵌入项目的插件形式,插件文件夹下的proguard-maven-plugin-2.3.1.jar、proguard-6.0.3.jar 参照:https://www.cnblogs.com/codhome/p/13621169.html
接下来,在`apply plugin`部分,应用`java`和`application`插件,这样我们就可以利用Gradle的默认任务来处理Java项目,并且可以创建可执行的JAR文件: ```groovy apply plugin: 'java' apply plugin: 'application'...