Java 如何在使用proguard maven插件后组装项目

Java 如何在使用proguard maven插件后组装项目,java,maven,proguard,maven-assembly-plugin,Java,Maven,Proguard,Maven Assembly Plugin,我试图在打包我的应用程序时添加混淆步骤。我认为我必须在编译器插件和程序集之间插入Proguard插件(程序集只是将我所有的应用程序和依赖项放在一个jar中) myApp org.apache.maven.plugins maven编译器插件 3.2 1.7 1.7 com.github.wvengen proguard maven插件 2.0.11 模糊包装 包裹 前卫 5.2 真的 真的 假的 真的 ${project.build.finalName}.jar ${project.build

我试图在打包我的应用程序时添加混淆步骤。我认为我必须在编译器插件和程序集之间插入Proguard插件(程序集只是将我所有的应用程序和依赖项放在一个jar中)


myApp
org.apache.maven.plugins
maven编译器插件
3.2
1.7
1.7
com.github.wvengen
proguard maven插件
2.0.11
模糊包装
包裹
前卫
5.2
真的
真的
假的
真的
${project.build.finalName}.jar
${project.build.finalName}.jar
真的
${java.home}/lib/rt.jar
...
net.sf.proguard
前卫基地
5.2
maven汇编插件
2.4
创建可执行jar
包裹
单一的
assembly.xml
myApp.Main
编译工作正常,模糊处理工作正常,但程序集似乎是用普通jar制作的,而不是模糊处理的jar

以下是my assembly.xml(如果需要):

    <?xml version="1.0" encoding="UTF-8"?>
    <assembly>
       <id>with-dep</id>
       <formats>
         <format>jar</format>
       </formats>
       <includeBaseDirectory>false</includeBaseDirectory>
       <dependencySets>
         <dependencySet>
           <!-- unpack les dépendances avant de les inclures dans le jar final de l'application -->
           <unpack>true</unpack>
           <scope>runtime</scope>
           <useProjectArtifact>false</useProjectArtifact>
         </dependencySet>
       </dependencySets>
       <fileSets>
         <fileSet>
           <directory>${project.build.outputDirectory}</directory>
           <outputDirectory></outputDirectory>
         </fileSet>
       </fileSets>
    </assembly>

与dep
罐子
假的
真的
运行时
假的
${project.build.outputDirectory}
最后,myApp.jar被模糊化了,但是myApp-with-dep.jar不是。。。 我还明确表示,我不太确定我的proguard插件的配置。如果你看到奇怪的事情,就说出来


谢谢您的时间。

我通过放弃maven assembly插件改为shade插件解决了这个问题。希望它能帮助别人

                    <plugin>
                            <groupId>org.apache.maven.plugins</groupId>
                            <artifactId>maven-compiler-plugin</artifactId>
                            <version>3.2</version>
                            <configuration>
                                <source>1.7</source>
                                <target>1.7</target>
                            </configuration>
                    </plugin>

                    <!--Obfuscation-->
                    <plugin>
                        <groupId>com.github.wvengen</groupId>
                        <artifactId>proguard-maven-plugin</artifactId>
                        <version>2.0.13</version>
                        <executions>
                            <execution>
                                <id>obfuscation-packaging</id>
                                <phase>package</phase>
                                <goals>
                                    <goal>proguard</goal>
                                </goals>
                                <configuration>
                                    <proguardVersion>5.2</proguardVersion>
                                    <obfuscate>true</obfuscate>
                                    <addMavenDescriptor>true</addMavenDescriptor>
                                    <injar>${project.build.finalName}.jar</injar>
                                    <outjar>${project.build.finalName}.jar</outjar>
                                    <mappingFileName>proguard_map.txt</mappingFileName>
                                    <seedFileName>proguard_seed.txt</seedFileName>
                                    <libs>
                                        <lib>${java.home}/lib/rt.jar</lib>
                                    </libs>

                                    <options>
                                    ...
                                    </options>
                                </configuration>
                            </execution>
                        </executions>
                        <dependencies>
                            <dependency>
                                <groupId>net.sf.proguard</groupId>
                                <artifactId>proguard-base</artifactId>
                                <version>5.2</version>
                            </dependency>
                        </dependencies>
                    </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>xxx.Main</mainClass>
                                  </transformer>
                                </transformers>
                                <filters>
                                    <filter>
                                        <artifact>*:*</artifact>
                                        <excludes>
                                            <exclude>META-INF/*.SF</exclude>
                                            <exclude>META-INF/*.DSA</exclude>
                                            <exclude>META-INF/*.RSA</exclude>
                                        </excludes>
                                    </filter>
                                </filters>
                            </configuration>
                          </execution>
                        </executions>
                    </plugin>

org.apache.maven.plugins
maven编译器插件
3.2
1.7
1.7
com.github.wvengen
proguard maven插件
2.0.13
模糊包装
包裹
前卫
5.2
真的
真的
${project.build.finalName}.jar
${project.build.finalName}.jar
proguard_map.txt
proguard_seed.txt
${java.home}/lib/rt.jar
...
net.sf.proguard
前卫基地
5.2
org.apache.maven.plugins
maven阴影插件
2.4.3
包裹
阴凉处
xxx.Main
*:*
META-INF/*.SF
META-INF/*.DSA
META-INF/*.RSA

将maven assembly plugin的打包阶段更改为
准备打包
阶段,maven assembly plugin将在proguard-maven-plugin之前运行。这可能是个好主意,但随后我得到一个“找不到文件路径/to/myApp.jar”。但是多亏了这一点,我想我开始理解这个问题了,这意味着jar还没有生成。这是否意味着它是由程序集插件根据您的配置生成的
                    <plugin>
                            <groupId>org.apache.maven.plugins</groupId>
                            <artifactId>maven-compiler-plugin</artifactId>
                            <version>3.2</version>
                            <configuration>
                                <source>1.7</source>
                                <target>1.7</target>
                            </configuration>
                    </plugin>

                    <!--Obfuscation-->
                    <plugin>
                        <groupId>com.github.wvengen</groupId>
                        <artifactId>proguard-maven-plugin</artifactId>
                        <version>2.0.13</version>
                        <executions>
                            <execution>
                                <id>obfuscation-packaging</id>
                                <phase>package</phase>
                                <goals>
                                    <goal>proguard</goal>
                                </goals>
                                <configuration>
                                    <proguardVersion>5.2</proguardVersion>
                                    <obfuscate>true</obfuscate>
                                    <addMavenDescriptor>true</addMavenDescriptor>
                                    <injar>${project.build.finalName}.jar</injar>
                                    <outjar>${project.build.finalName}.jar</outjar>
                                    <mappingFileName>proguard_map.txt</mappingFileName>
                                    <seedFileName>proguard_seed.txt</seedFileName>
                                    <libs>
                                        <lib>${java.home}/lib/rt.jar</lib>
                                    </libs>

                                    <options>
                                    ...
                                    </options>
                                </configuration>
                            </execution>
                        </executions>
                        <dependencies>
                            <dependency>
                                <groupId>net.sf.proguard</groupId>
                                <artifactId>proguard-base</artifactId>
                                <version>5.2</version>
                            </dependency>
                        </dependencies>
                    </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>xxx.Main</mainClass>
                                  </transformer>
                                </transformers>
                                <filters>
                                    <filter>
                                        <artifact>*:*</artifact>
                                        <excludes>
                                            <exclude>META-INF/*.SF</exclude>
                                            <exclude>META-INF/*.DSA</exclude>
                                            <exclude>META-INF/*.RSA</exclude>
                                        </excludes>
                                    </filter>
                                </filters>
                            </configuration>
                          </execution>
                        </executions>
                    </plugin>