2012-01-02 9 views
11

मैं Maven Shade Plugin के minimizeJar का उपयोग कर उबरजार के आकार को कम करने की कोशिश कर रहा हूं। ऐसा लगता है कि minimizeJar में केवल उन वर्गों को शामिल किया गया है जो कोड में स्थिर रूप से आयात किए जाते हैं (मुझे संदेह है क्योंकि org\apache\commons\logging\ परपर दिखाई देता है लेकिन impl पैकेज के कोई भी वर्ग शामिल नहीं हैं, इसलिए java.lang.ClassNotFoundException: org.apache.commons.logging.impl.LogFactoryImpl फेंकते समय मैं उबेर-जार चलाता हूं)।क्लास फाइलों को शामिल करने के लिए मेवेन छाया मिनीमाइज जार को कॉन्फ़िगर करें

वहाँ किसी भी तरह से मैं Maven के शेड प्लगइन बता कोई बात नहीं क्या minimizeJar पता चलता अंतिम जार में निर्दिष्ट संकुल शामिल करने के लिए कर सकता है?

यहाँ मैं क्या कोशिश कर रहा हूँ की पोम टुकड़ा:

<plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-shade-plugin</artifactId> 
     <version>1.5</version> 
     <executions> 
      <execution> 
       <phase>package</phase> 
       <goals> 
        <goal>shade</goal> 
       </goals> 
       <configuration> 
        <minimizeJar>true</minimizeJar> 
        <filters> 
         <filter> 
          <artifact>commons-logging:commons-logging</artifact> 
          <includes> 
           <include>org/apache/commons/logging/**</include> 
          </includes> 
         </filter>  
        </filters> 
        <transformers> 
         <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> 
          <mainClass>com.myproject.Main</mainClass> 
         </transformer> 
        </transformers>        
       </configuration> 
      </execution> 
     </executions> 
    </plugin> 
+1

'संगठन/अपाचे/कॉमन्स/लॉगिंग/** 'केवल निर्देशिका से मेल खाता है, तो आप शायद सभी फाइलों से मेल खाना चाहते हैं। इसके बजाए 'संगठन/अपाचे/कॉमन्स/लॉगिंग/**/*' का प्रयोग करें। – Corubba

+0

आपके सुझाव के बाद, मैंने कोशिश की ... लॉगिंग/** ', '... लॉगिंग/**/*', '... लॉगिंग /**/*.*' लेकिन कोई भी काम नहीं किया। मुझे लगता है कि समस्या शामिल है पहले शामिल हैं तो minimizeJar सब कुछ अनदेखा करता है और जार को बंडल करता है जैसा कि यह सोचता है उपयुक्त है। – kunal

उत्तर

14

यह कार्यक्षमता Maven-छाया-प्लगइन का संस्करण 1.6 में जोड़ा गया है (बस जारी)। minimizeJar अब उन वर्गों को नहीं हटाएगा जिन्हें विशेष रूप से फ़िल्टर के साथ शामिल किया गया है। ध्यान दें कि फ़िल्टर में कुछ आर्टिफैक्ट वर्गों को उस कलाकृति के लिए गैर-निर्दिष्ट कक्षाओं को बहिष्कृत किया जाएगा, इसलिए आपको आवश्यक सभी कक्षाओं को शामिल करना सुनिश्चित करें।

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-shade-plugin</artifactId> 
    <version>1.6</version>  
    <executions> 
     <execution> 
      <phase>package</phase> 
      <goals> 
       <goal>shade</goal> 
      </goals>       
      <configuration> 
       <minimizeJar>true</minimizeJar>  
       <filters> 
        <filter> 
         <artifact>log4j:log4j</artifact> 
         <includes> 
          <include>**</include> 
         </includes> 
        </filter> 
        <filter> 
         <artifact>commons-logging:commons-logging</artifact> 
         <includes> 
          <include>**</include> 
         </includes> 
        </filter>      
       </filters> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 
+0

नीचे-स्तर ' ** 'मेरे लिए काम नहीं किया। ऐसा लगता है कि अन्य पैकेजों से भी कई चीजें शामिल हैं। इसके बजाय मुझे ' संगठन/अपाचे/लॉगिंग/लॉग 4j/** लॉग 4j- *' – Quantum7

10

मैं Maven शेड प्लगइन का 2.0 संस्करण का उपयोग कर रहा है और अब भी मैं के बाद "कम से कम" जार वर्गों को शामिल करने में सक्षम नहीं हूँ:

यहाँ एक उदाहरण प्लगइन config है।

कामकाज के रूप में एकमात्र चीज जो मेरे दिमाग में आती है, उनको छुटकारा पाने के लिए न्यूनतमकरण कोड से बचने के लिए आवश्यक कक्षाओं के संदर्भ बनाना है। अर्थात्:

/* 
* This block prevents the Maven Shade plugin to remove the specified classes 
*/ 
static { 
    @SuppressWarnings ("unused") Class<?>[] classes = new Class<?>[] { 
     JButton.class, 
     JMenu.class, 
     JMenuBar.class, 
     JMenuItem.class 
    }; 
} 

मुझे आशा है कि Maven डेवलपर्स इस स्थिति (जो मुझे लगता है कि बहुत आम है) को संभालने के लिए एक तरह से लागू करते हैं।

+0

अच्छा कामकाज का उपयोग करना पड़ा :) – kunal

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