Maven 环境下使用 proguard-maven-plugin 插件混淆你的源码
摘要 a、ProGuard(http://proguard.sourceforge.net/)
是比较出色的 Java 代码混淆工具,可以有效的保护与优化你的代码。当然这里说的保护是防止恶意抄袭,通过混淆造成反编译阅读困难。但逻辑与内容并不会加密,仔细分析还是可以获得一些信息。 b、proguard-maven-plugin 是 Maven 中的 ProGuard 插件,可以非常方便的在你做 Maven 打包时进行代码混淆。 c、本文重点介绍 Maven 环境下插件的配置(重点参数),与类路径加载资源问题。
目录[-]
一、场景介绍
两个工程 Project1,Project2(将被混淆的工程)。Project1 将通过 Maven 依赖配置的方式引用混淆后的 Project2。后面我会详细介绍 pom.xml 的配置。
二、Maven 配置
1、Project1 的 pom.xml
该 pom.xml 比较简单主要通过 classifier 来判断是否使用混淆的 Jar(Project2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
<? 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
http://maven.apache.org/xsd/maven-4.0.0.xsd" >
< modelVersion >4.0.0</ modelVersion >
< groupId >org.noahx.proguard.example</ groupId >
< artifactId >project1</ artifactId >
< version >1.0-SNAPSHOT</ version >
< dependencies >
< dependency >
< groupId >org.noahx.proguard.example</ groupId >
< artifactId >project2</ artifactId >
< classifier >pg</ classifier >
<!--如果不想依赖混淆的包,请注释掉该行-->
< version >1.0-SNAPSHOT</ version >
</ dependency >
</ dependencies >
</ project >
|
2、Project2 的 pom.xml
pom.xml 中配置的 proguard-maven-plugin 来做混淆,详细说明见注释。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
<? 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
http://maven.apache.org/xsd/maven-4.0.0.xsd" >
< modelVersion >4.0.0</ modelVersion >
< groupId >org.noahx.proguard.example</ groupId >
< artifactId >project2</ artifactId >
< version >1.0-SNAPSHOT</ version >
< build >
< plugins >
< plugin >
< groupId >com.github.wvengen</ groupId >
< artifactId >proguard-maven-plugin</ artifactId >
< version >2.0.7</ version >
< executions >
< execution >
< phase >package</ phase >
< goals >
< goal >proguard</ goal >
</ goals >
</ execution >
</ executions >
< configuration >
< attach >true</ attach >
< attachArtifactClassifier >pg</ attachArtifactClassifier >
<!--
attach 的作用是在 install 与 deploy 时将生成的 pg 文件也安装与部署 -->
<
|