2009-05-19 33 views
17

Tôi đang cố gắng để Maven làm việc với ProGuard.Các vấn đề về Maven, Proguard và assembly

Những gì tôi muốn đạt được là sau:

  • Run ProGuard qua các tập tin nguồn của tôi và tạo ra lớp obfuscated

  • Tạo một file manifest tham chiếu đến các lớp học chính vì vậy mà tôi có thể thực hiện nó như một cái bình

  • Giải nén tất cả các lọ thư viện liên quan và tạo một cái lọ lớn chứa tất cả chúng. Tệp này chỉ nên liên hệ với các tệp .class và .xml.

  • Lắp ráp chúng thành tệp .zip và tar.gz bao gồm các tệp README.txt khác nhau, v.v.

Cho đến nay tôi đã có một cái gì đó như thế này:

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

Nhưng tôi không có niềm vui. Bất cứ ai có thể cho tôi bất kỳ con trỏ mơ hồ về điều này?

Cảm ơn trước, Matt

+0

@starblue Maven không có bất kỳ khái niệm '[assembly]' nào. Tuy nhiên, '[assembly]' là một cái rất hợp lệ. Vì vậy, vui lòng ngừng hoạt động như các thẻ dành cho các tên miền duy nhất, loại trừ mọi thứ không khớp với tầm nhìn của bạn về việc sử dụng chúng. Thẻ dành cho bộ, thêm nhiều ràng buộc hơn. Đừng cấm tôi sử dụng thẻ cũng áp dụng cho Maven. Điều này là khó chịu gây phiền nhiễu. –

+0

http://maven.apache.org/plugins/maven-assembly-plugin/: Plugin này tạo "hội đồng". – starblue

Trả lời

9

Dưới đây là cấu hình đó đã làm việc cho tôi

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

Các jar thức là finalName-small.jar

+0

Có lý do nào bạn đang sử dụng pha gói và không phải là giai đoạn xử lý lớp không? Các Process-classes chạy sau khi biên dịch nhưng trước package nên bạn có thể truy cập vào các target/classes trước khi chúng được jarred. – sal

+0

Đã lâu rồi, nhưng theo như tôi nhớ, tôi phát hiện ra rằng plugin về cơ bản chạy proguard, vì vậy nó thích lấy một cái bình và phát ra một cái rít. Nói cách khác - nhiều thử và sai, cái này hoạt động ... –

+0

làm thế nào để bạn đối phó với nhiều mô-đun Maven trong cùng một dự án? Bạn có chạy plugin trong tệp pom.xml gốc không, bạn có chạy nó trong hội đồng mô-đun web ui không? – Alex