2009-05-19 13 views
17

Próbuję zmusić Mavena do pracy z ProGuardem.Problemy z Mavenem, Proguardem i montażem

Co chcę osiągnąć jest następujące:

  • Run ProGuard nad moimi plikami źródłowymi i produkują ukrywane klas

  • Utwórz plik manifestu, który odwołuje główne klasy tak, że można ją wykonać jako słoik

  • Rozpakuj wszystkie powiązane słoiki z bibliotekami i utwórz jeden ogromny słoik zawierający je wszystkie. Ten plik powinien tylko kontaktować się z plikami .class i .xml.

  • Złóż je do plików .zip i tar.gz, które zawierają różne pliki README.txt i tak dalej.

Do tej pory mam coś takiego:

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

ale mam żadnej radości. Czy ktoś może mi podać jakieś niejasne wskazówki?

Dzięki z góry, Matt

+0

@starblue Maven nie ma każdą koncepcję "[złożeń]". Jednak "[assembly]" jest bardzo ważnym. Więc przestań się zachowywać jak tagi dla unikalnych domen, wyłączając wszystko, co nie pasuje do twojej wizji ich użycia. Tagi są ustawione, dodaj więcej ograniczeń. Nie zabraniaj mi używania tagu, który dotyczy także Mavena. To jest denerwujące denerwujące. –

+0

http://maven.apache.org/plugins/maven-assembly-plugin/: Ta wtyczka generuje "złoŜenia". – starblue

Odpowiedz

9

Oto konfiguracja, który pracował dla mnie

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

Ostateczna słoiku jest finalName-small.jar

+0

Czy istnieje powód, dla którego używasz fazy pakietu, a nie fazy klas procesu? Klasy procesowe działają po kompilacji, ale przed pakietem, abyś mógł uzyskać dostęp do celu/klas, zanim zostaną one skażone. – sal

+0

Minęło trochę czasu, ale o ile pamiętam, dowiedziałem się, że wtyczka działa w zasadzie progu, więc lubi zdobywać jeden słoik i emitować inny. Innymi słowy - wiele prób i błędów, ten działa ... –

+0

jak sobie radzisz z wieloma modułami Maven w tym samym projekcie? czy uruchamiasz wtyczkę w katalogu głównym pom.xml, czy uruchamiasz go w module modułu WWW, itp.? – Alex

Powiązane problemy