2009-05-19 25 views
17

Estoy intentando que Maven trabaje con ProGuard.Problemas de Maven, Proguard y montaje

Lo que quiero lograr es la siguiente:

  • Run ProGuard sobre mis archivos de origen y producir clases ofuscado

  • Crear un archivo de manifiesto que hace referencia a la clase principal para que pueda ejecutarlo como jar

  • Desempaquete todos los jar de biblioteca asociados y cree un jar enorme que los contenga a todos. Este archivo solo debe contactarse con los archivos .class y .xml.

  • Combínelos en archivos .zip y tar.gz que incluyen varios archivos README.txt y más.

Hasta ahora tengo algo como esto:

 <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-jar-plugin</artifactId> 
      <version>2.2</version> 
      <configuration> 
       <archive> 
        <manifest> 
         <mainClass>com.class.path.MainClass</mainClass> 
        </manifest> 
       </archive> 
       <includes> 
        <include>**/*.class</include> 
        <include>**/*.xml</include> 
       </includes> 
      </configuration> 
     </plugin> 

     <plugin> 
      <groupId>com.pyx4me</groupId> 
      <artifactId>proguard-maven-plugin</artifactId> 
      <configuration> 
       <options> 
        <option>-allowaccessmodification</option> 
       </options> 
       <obfuscate>true</obfuscate> 
       <injar>classes</injar> 
       <outjar>${project.build.finalName}.jar</outjar> 
       <outputDirectory>${project.build.directory}</outputDirectory> 
       <proguardInclude>src/main/assembly/proguard.conf</proguardInclude> 
       <libs> 
        lib/rt.jar</lib> 
       </libs> 
      </configuration> 
      <executions> 
       <execution> 
        <phase>process-classes</phase> 
        <goals> 
         <goal>proguard</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 

     <plugin> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <executions> 
       <execution> 
        <id>assembly</id> 
        <phase>package</phase> 
        <goals> 
         <goal>assembly</goal> 
        </goals> 
        <configuration> 
         <descriptors> 
          <descriptor> 
           src/main/assembly/bin.xml 
          </descriptor> 
         </descriptors> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 

Pero estoy teniendo ninguna alegría. ¿Alguien puede darme algunos consejos vagos sobre esto?

Gracias de antemano, Matt

+0

@starblue Maven no tiene cualquier concepto '[assemblies]'. Sin embargo, '[assembly]' es muy válido. Por lo tanto, deje de comportarse como las etiquetas para dominios únicos, excluyendo todo lo que no coincida con su visión de su uso. Las etiquetas son para establecer, agregar más restricciones. No me prohíba usar una etiqueta que se aplique a Maven también. Esto es malditamente molesto –

+0

http://maven.apache.org/plugins/maven-assembly-plugin/: Este complemento genera "ensambles". – starblue

Respuesta

9

Esta es la configuración que había trabajado para mí

<plugin> 
    <groupId>com.pyx4me</groupId> 
    <artifactId>proguard-maven-plugin</artifactId> 
    <executions> 
     <execution> 
      <phase>package</phase> 
      <goals> 
       <goal>proguard</goal> 
      </goals> 
     </execution> 
    </executions> 
    <configuration> 
     <obfuscate>true</obfuscate> 
     <options> 
      <option>-allowaccessmodification</option> 
      <option>-keep public class com.class.path.MainClass { 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> 
</plugin> 

El tarro final es la finalName-small.jar

+0

¿Hay alguna razón por la que está utilizando la fase de paquete y no la fase de clases de proceso? Process-classes se ejecuta después de la compilación, pero antes del paquete, de modo que puede acceder al objetivo/a las clases antes de que se agiten. – sal

+0

Ha pasado un tiempo, pero por lo que recuerdo recuerdo que descubrí que el plugin básicamente funciona correctamente, por lo que le gusta obtener un jar y emitir otro. En otras palabras, muchos intentos de prueba y error, este funciona ... –

+0

¿cómo se maneja con múltiples módulos Maven en el mismo proyecto? ¿ejecutas el complemento en la raíz pom.xml, lo ejecutas en el conjunto del módulo web ui, etc.? – Alex

Cuestiones relacionadas