2009-05-19 18 views
17

मैं प्रोवेर्ड के साथ मेवेन को काम करने की कोशिश कर रहा हूं।मेवेन, प्रोगार्ड और असेंबली मुद्दे

क्या मैं हासिल करना चाहते हैं निम्नलिखित है:

  • भागो मेरे स्रोत फ़ाइलों पर ProGuard और उत्पादन समझ से परे कक्षाएं

  • मालसूची फ़ाइल मुख्य वर्ग का संदर्भ देता है ताकि मैं इसे निष्पादित कर सकते हैं बनाएं एक जार

  • सभी संबंधित लाइब्रेरी जार अनपैक करें और उनमें से एक विशाल जार बनाएं। यह फ़ाइल केवल .class और .xml फ़ाइलों से संपर्क करनी चाहिए।

  • उन्हें .zip और tar.gz फ़ाइलों में इकट्ठा करें जिनमें विभिन्न README.txt फ़ाइलें शामिल हैं और इसी तरह।

अब तक मैं कुछ इस तरह है:

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

लेकिन मैं कोई खुशी हो रही है। क्या कोई मुझे इस पर कोई अस्पष्ट संकेत दे सकता है?

अग्रिम धन्यवाद, मैट

+0

@starblue Maven नहीं है किसी भी '[विधानसभा]' अवधारणा। हालांकि, '[असेंबली]' एक बहुत मान्य है। तो कृपया व्यवहार की तरह व्यवहार करना बंद करें जैसे अद्वितीय डोमेन के लिए हैं, जो कि उनके उपयोग की दृष्टि से मेल नहीं खाते हैं। टैग सेट के लिए हैं, और बाधाओं को जोड़ें। मेवेन पर भी लागू होने वाले टैग का उपयोग करने के लिए मुझे मना न करें। यह कष्टप्रद है। –

+0

http://maven.apache.org/plugins/maven-assembly-plugin/: यह प्लगइन "असेंबली" उत्पन्न करता है। – starblue

उत्तर

9

यहाँ विन्यास है कि मुझे

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

अंतिम जार के लिए काम किया था finalName-small.jar है

+0

क्या कोई कारण है कि आप पैकेज चरण का उपयोग कर रहे हैं, न कि प्रक्रिया-वर्ग चरण? प्रक्रिया-वर्ग संकलन के बाद चलता है लेकिन पैकेज से पहले ताकि आप लक्ष्य प्राप्त करने से पहले लक्ष्य/कक्षाओं तक पहुंच सकें। – sal

+0

यह थोड़ी देर हो गया है, लेकिन जहां तक ​​मुझे याद है कि मुझे पता चला है कि प्लगइन मूल रूप से प्रोग्रार्ड चलाता है, इसलिए इसे एक जार प्राप्त करना और किसी अन्य को छोड़ना पसंद है। दूसरे शब्दों में - कई परीक्षण और त्रुटि, यह एक काम करता है ... –

+0

आप एक ही परियोजना में एकाधिक मेवेन मॉड्यूल से कैसे निपटते हैं? क्या आप रूट pom.xml में प्लगइन चलाते हैं, क्या आप इसे वेब ui मॉड्यूल असेंबली आदि में चलाते हैं? – Alex

संबंधित मुद्दे