摘要
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 文件也安装与部署 -->
<
|