2012-01-11 14 views
20

का उपयोग करके एक उबेर जार को सही ढंग से छोटा करें, मैं एक रननेबल उबर-जार बनाने के लिए मेवेन-शेड-प्लगइन का उपयोग कर रहा हूं। this page पर अंतिम फ्रेम के अनुसार, जार के आकार का उपयोग करके कम किया जा सकता:छाया-प्लगइन

<configuration> 
     <minimizeJar>true</minimizeJar> 
</configuration> 

लेकिन इस सुविधा को ध्यान में कक्षाएं कि log4j.properties फ़ाइल घोषित किये गए हैं नहीं लेता है। इसलिए, उदा। org.apache.log4j.appender.TimeAndSizeRollingAppender उबेर-जार में शामिल नहीं है, भले ही इसे log4j.properties फ़ाइल में घोषित किया गया हो।

मेरा मानना ​​है कि मुझे वसंत के साथ एक ही समस्या का सामना करना पड़ेगा। यदि मेरा कोड केवल इंटरफ़ेस को संदर्भित करता है और मेरी स्प्रिंग फ़ाइल में कक्षा बी का एक त्वरण होता है जो ए लागू करता है, तो बी को जार में जोड़ा नहीं जा सकता है, क्योंकि यह कोड में नहीं है।

मैं इस समस्या को कैसे हल कर सकता हूं?

+0

Alsmot, लेकिन काफी नहीं, http://stackoverflow.com/questions/8698814/configure-maven-shade-minimizejar-to-include-class-files – Raedwald

उत्तर

22

यह कार्यक्षमता मैवेन-शेड-प्लगइन (अभी जारी) के संस्करण 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> 

onlu करने के लिए, विशिष्ट वर्गों में शामिल हैं उन्हें जोड़ने के रूप में शामिल पथ का उपयोग कर एक फिल्टर में वर्ग के नाम में स्लैश:

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

<filter> 
    <artifact>org.yourorg:your-artifact</artifact> 
    <includes> 
    <include>org/yourorg/yourartifact/api/*</include> 
    <include>org/yourorg/yourartifact/util/*</include> 
    </includes> 
</filter> 
+0

Maven दस्तावेज की एक प्रति का डुप्लिकेट। – Raedwald

+15

हां, मैंने यह उत्तर लिखा और उसी समय मेवेन डॉक्स को अपडेट किया ... – Shane

+0

क्या आप "हमेशा विशिष्ट कक्षाएं रखने" विकल्प का समर्थन कर सकते हैं? उदाहरण के लिए, कॉन्फ़िगरेशन विशिष्ट कक्षाओं/मास्क को रखने के लिए सूचीबद्ध करता है, और मैवेन-शेड-प्लगइन स्वचालित रूप से अप्रयुक्त कक्षाओं की गणना करता है? –

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

  • कोई संबंधित समस्या नहीं^_^