2012-06-07 10 views
18

Ich versuche ProGuard Teil unseres Maven-Build-Prozesses zu machen. Das Problem ist, dass das offizielle Maven-Plugin ProGuard 4.3 verwendet, welches Java 7 nicht unterstützt. Gibt es einen einfachen Weg, das Plugin stattdessen Proguard 4.8 zu benutzen?ProGuard + Maven mit Java 7

Ich habe versucht, die Abhängigkeit für das Plugin anzugeben, aber ProGuard scheint eine neue Struktur für Maven-Module zu haben (proguard-base, proguard-parent usw.), so dass das Plugin keine Version> 4.4 verwenden kann. So sieht mein aktueller Pom aus:

<plugin> 
       <groupId>com.pyx4me</groupId> 
       <artifactId>proguard-maven-plugin</artifactId> 
       <executions> 
        <execution> 
         <phase>package</phase> 
         <goals> 
          <goal>proguard</goal> 
         </goals> 
        </execution> 
       </executions> 
       <configuration> 
        <proguardVersion>4.8</proguardVersion> 
        <obfuscate>true</obfuscate> 
        <options> 
         <option>-allowaccessmodification</option> 
         <option>-keep public class com.degoo.ui.ClientBackendStarter { public *; public static *; }</option> 
        </options> 
        <injar>${project.build.finalName}.jar</injar> 
        <outjar>${project.build.finalName}-small.jar</outjar> 
        <outputDirectory>${project.build.directory}</outputDirectory> 
        <libs> 
         <lib>${java.home}/lib/rt.jar</lib> 
         <lib>${java.home}/lib/jsse.jar</lib> 
        </libs> 
        <addMavenDescriptor>false</addMavenDescriptor> 
       </configuration> 
       <dependencies> 
        <dependency> 
         <groupId>net.sf.proguard</groupId> 
         <artifactId>proguard</artifactId> 
         <version>4.8</version> 
         <scope>runtime</scope> 
        </dependency> 
       </dependencies> 
      </plugin> 

Irgendwelche Vorschläge?

+0

Die Struktur von ProGuard selbst (und seinen Gläsern) hat sich nicht geändert, daher sollte die Aktualisierung von dieser Seite trivial sein. Ich weiß aber nichts über Maven oder seine Plugins. –

Antwort

23

Ich benutze das Proguard-Maven-Plugin von com.github.wvengen. Beachten Sie die unterschiedlichen groupId. Auf diese Weise kann ich das neueste proguard-base Artefakt 5.0 verwenden. Beide sind in Maven Central. Hier ist, wie der proguard-Basisteil in meinem pom.xml jetzt aussieht:

Eltern pom.xml:

<build> 
    <pluginManagement> 
     <plugins> 
      <plugin> 
       <groupId>com.github.wvengen</groupId> 
       <artifactId>proguard-maven-plugin</artifactId> 
       <version>2.0.8</version> 
       <dependencies> 
        <dependency> 
         <groupId>net.sf.proguard</groupId> 
         <artifactId>proguard-base</artifactId> 
         <version>5.0</version> 
         <scope>runtime</scope> 
        </dependency> 
       </dependencies> 
      </plugin> 
[...] 

Hier ist der Rest von meinem Kind pom.xml, aber Sie wollen wahrscheinlich, dass ändern:

<build> 
    <plugins> 
     <plugin> 
      <groupId>com.github.wvengen</groupId> 
      <artifactId>proguard-maven-plugin</artifactId> 
      <executions> 
       <execution> 
        <id>process-classes-with-proguard</id> 
        <phase>process-classes</phase> 
        <goals> 
         <goal>proguard</goal> 
        </goals> 
        <configuration> 
         <maxMemory>256m</maxMemory> 
         <injar>classes</injar> 
         <libs> 
          <lib>${rt.jar.path}</lib> 
          <lib>${jsse.jar.path}</lib> 
         </libs> 
         <obfuscate>true</obfuscate> 
         <attach>true</attach> 
         <addMavenDescriptor>false</addMavenDescriptor> 
         <proguardInclude>${project.basedir}/proguard.conf</proguardInclude> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 

UPDATE: Für meine Android-Projekte ich verwende kein dediziertes Proguard Plugin wie proguard-maven-Plugin, da die Android-maven-Plugin die ProGuard Verschleierung selbst behandelt und integriert sich besser in die Build verarbeiten s für Android.

+0

das funktioniert wegen der Version 4.9, die für Java 7 verwendet wird –