`

使用Maven控件proguard-maven-plugin给可执行jar文件混淆

 
阅读更多

上文已实现打出可执行的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-2.3.1.jar

    修改proguard-maven-plugin插件默认可以对proguard打包后的jar重新打包

    实现maven管理的Javaweb项目的proguard代码混淆功能

    3. 执行构建:运行`mvn package`命令,Maven会自动调用ProGuard并将混淆后的结果打包进最终的jar或war文件。 在实际操作中,可能会遇到一些问题,如类找不到、配置文件错误等。解决这些问题的关键在于正确配置...

    springboot工程(单个maven工程)利用proguard实现代码混淆

    本篇文章将详细探讨如何在一个Spring Boot的Maven工程中集成并使用ProGuard进行代码混淆。 首先,让我们理解什么是代码混淆。代码混淆是指将源代码中的类名、方法名和变量名替换为无意义的简短名称,同时保持代码的...

    SpringBoot + proguard+maven多模块实现代码混淆

    基于SpringBoot+Maven多模块工程利用proguard组件实现代码混淆的代码demo,代码清晰完整,导入idea或eclipse即可...详细实现步骤可查阅本人博客文章《SpringBoot + proguard+maven多模块实现代码混淆》,有详细描述。

    proguard-maven-plugin:支持模块化ProGuard软件包的ProGuard Maven插件

    **ProGuard Maven插件**是Java开发者在Maven构建流程中使用的一个重要工具,它主要负责执行代码混淆、优化、压缩和预校验等任务。这个插件是针对ProGuard工具的集成,使得在Maven项目中应用ProGuard变得更加便捷。...

    proguard-7.4.0,适合JDK21及以下,官网正版

    构建项目时,ProGuard将自动应用你的配置和规则,以确保生成的APK文件是混淆和优化过的。 这份ZIP文件旨在帮助你轻松地加强你的应用程序安全性和性能。如果你是一个关心应用程序质量的开发者,这个资源将为你提供所...

    maven-plugin-2.2.0_1.jar

    maven-plugin-2.2.0_1.jar

    springboot工程(单个maven工程)利用proguard实现代码混淆 java demo案例

    ProGuard是一款强大的Java类文件混淆、优化、压缩和预校验工具,它能够帮助我们实现这个目标。 本案例是一个Spring Boot单个Maven工程,通过ProGuard实现代码混淆的实践示例。首先,我们需要了解ProGuard的基本配置...

    Java+IDEA+maven混淆打包

    在`pom.xml`文件中,我们需要添加`maven-jar-plugin`插件来打包Java项目。以下是一个基本的配置示例: ```xml &lt;plugin&gt; &lt;groupId&gt;org.apache.maven.plugins &lt;artifactId&gt;maven-jar-plugin &lt;version&gt;3.2.0...

    IDFC Maven ProGuard Plug-in:一个通过ProGuard混淆Java代码的Maven插件-开源

    该插件使您可以使用ProGuard开源混淆器来混淆Maven工件,ProGuard开源混淆器是一种非常强大且完善的Java混淆器。 也可以在SourceForge的http://proguard.sourceforge.net/上找到ProGuard。 可以从您的POM使用此插件...

    maven 代码混淆.zip

    在命令行中,执行`mvn package`命令,Maven会按照pom.xml中的配置执行编译和混淆操作,最终生成混淆后的jar文件。 对于Android项目,由于使用了Gradle构建系统,混淆通常在`build.gradle`文件中配置,但原理与上述...

    proguard-with-maven-example:如何使用Apache Maven进行ProGuard

    将ProGuard与Maven结合使用,可以让开发者在Maven的构建流程中自动化执行代码混淆、优化等操作,简化了整个过程。下面我们将详细探讨如何在Maven项目中配置和使用ProGuard。 首先,要在Maven项目中引入ProGuard,...

    Java+IDEA+Maven混淆打包

    在IT行业中,开发Java应用程序时,我们经常需要将代码打包成可执行的JAR文件,以便于部署和分发。本教程将详细讲解如何在IntelliJ IDEA(IDEA)中利用Maven进行混淆打包,确保代码的安全性并提高可维护性。 首先,...

    cordova-plugin-proguard:适用于ProGuard的Cordova插件

    科尔多瓦插件保护 Cordova插件可激活ProGuard和缩小功能,以... cordova plugin add cordova-plugin-proguard此命令将配置您的build.gradle文件并将proguard-custom.txt复制到${androidPlatformDirectory}/assets/www

    jar混淆proguard(jdk1.8测试可用).zip

    ProGuard是一个压缩、优化和混淆Java字节码文件的免费的工具,它可以删除无用的类、字段、方法和属性。可以删除没用的注释,最大限度地优化字节码文件。它还可以使用简短的无意义的名称来重命名已经存在的类、字段、...

    java6.0源码-code-hidding-plugin:Codehidding-plugin.在proguard-maven-plugin

    在proguard-maven-plugin的基础上修改而来,可以在项目构建过的时候把代码混淆,支持打成jar包和war包。 基本支持Proguard的所有功能。 博客地址: ##使用方法 先进行Maven install 然后在需要混淆代码的工程中加入...

    obfuscation-maven-plugin:一个用于使用qprotect混淆编译文件的Maven插件

    混淆技术是软件开发中的一种策略,主要目的是为了保护代码不被轻易理解和篡改,特别是在开源或者需要发布可执行文件的场景中。在Java世界里,这一技术常用于Android应用开发,但也适用于桌面应用和其他Java项目。...

    加密打包-proguard.rar

    proguard可以用两种方式实现加密打包。 1、使用proguard工具,...2、嵌入项目的插件形式,插件文件夹下的proguard-maven-plugin-2.3.1.jar、proguard-6.0.3.jar 参照:https://www.cnblogs.com/codhome/p/13621169.html

    Gradle混淆+打包Jar包基础DEMO

    接下来,在`apply plugin`部分,应用`java`和`application`插件,这样我们就可以利用Gradle的默认任务来处理Java项目,并且可以创建可执行的JAR文件: ```groovy apply plugin: 'java' apply plugin: 'application'...

Global site tag (gtag.js) - Google Analytics