Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
525 views
in Technique[技术] by (71.8m points)

java - How to assembly a project after using proguard-maven-plugin

I am trying to add an obfuscation step while packaging my app. I supposed that I had to insert the Proguard plugin between the compiler plugin and the assembly (the assembly just put all of my app and dependencies into one single jar).

<build>
    <finalName>myApp</finalName>
    <plugins>
        <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>

        <plugin>
             <groupId>com.github.wvengen</groupId>
             <artifactId>proguard-maven-plugin</artifactId>
             <version>2.0.11</version>
             <executions>
                  <execution>
                  <id>obfuscation-packaging</id>
                  <phase>package</phase>
                  <goals>
                      <goal>proguard</goal>
                  </goals>
                  <configuration>
                      <proguardVersion>5.2</proguardVersion>
                      <obfuscate>true</obfuscate>
                      <attach>true</attach>
                      <appendClassifier>false</appendClassifier>
                      <addMavenDescriptor>true</addMavenDescriptor>
                      <injar>${project.build.finalName}.jar</injar>
                      <outjar>${project.build.finalName}.jar</outjar>
                      <injarNotExistsSkip>true</injarNotExistsSkip>
                      <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>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>2.4</version>
            <executions>
                <execution>
                    <id>create-executable-jar</id>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                    <configuration>
                        <descriptors>
                            <descriptor>assembly.xml</descriptor>
                        </descriptors>
                        <archive>
                            <manifest>
                                <mainClass>myApp.Main</mainClass>
                            </manifest>
                        </archive>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

The compiling works fine, so does the obfuscation, but the assembly seems to be made with the normal jar, not the obfuscated one.

Here is my assembly.xml if needed:

    <?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>

In the end, myApp.jar is obfuscated, but myApp-with-dep.jar is not... I also precise that I'm not quite sure about the configuration of my proguard plugin. If you see something weird, say it.

Thanks for your time.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

I solved it by abandoning maven assembly plugin to shade plugin. Hope it might help someone.

                    <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>

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...