2016-04-06 9 views
5

के साथ बनाया में साथ नहीं हो सकते यदि अन्य सामग्री द्वारा लेकिन दो अलग Maven में एक ही नाम के साथ दो फ़ाइलें हैं -मोड्यूल, दोनों मेवेन असेंबली-प्लगइन के साथ एक जार फ़ाइल में एक साथ रखे जाते हैं, केवल एक फ़ाइल .jar फ़ाइल का हिस्सा बनती है।फ़ाइलें नहीं एक जार फ़ाइल Maven विधानसभा-प्लगइन

प्रश्न: क्या यह सुनिश्चित करने का कोई तरीका है कि जार-फाइल बनाने के दौरान फ़ाइलों की सामग्री को एक फ़ाइल में इकट्ठा किया गया है?

मैं स्पष्ट रूप से जानकारी को मैन्युअल रूप से एक साथ रखना नहीं चाहता हूं, क्योंकि मैं इस परियोजना को विभिन्न मॉड्यूल में विभाजित करके टालने की कोशिश कर रहा हूं।

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

<id>jar-with-dependencies</id> 
<formats> 
    <format>jar</format> 
</formats> 
<includeBaseDirectory>false</includeBaseDirectory> 
<dependencySets> 
    <dependencySet> 
     <outputDirectory>/</outputDirectory> 
     <useProjectArtifact>true</useProjectArtifact> 
     <unpack>true</unpack> 
     <scope>runtime</scope> 
     <unpackOptions> 
      <excludes> 
       <exclude>**/*Resources_*</exclude> 
       <exclude>**/*ErrorsText_*</exclude> 
      </excludes> 
     </unpackOptions> 
    </dependencySet> 
</dependencySets> 

उत्तर

5

maven-assembly-plugin प्रलेखन द्वारा निर्दिष्ट के रूप में:

अपनी परियोजना एक uber-जार में अपने विरूपण साक्ष्य पैकेज करना चाहता है, विधानसभा प्लगइन केवल बुनियादी सहायता प्रदान करता है। अधिक नियंत्रण के लिए, मेवेन छाया प्लगइन का उपयोग करें।


का उपयोग maven-shade-plugin आप एक वसा जार हो सकता है (विधानसभा प्लगइन का उपयोग कर की तरह) और Resources transformers का उपयोग कर फ़ाइल विलय की इसी तरह के मुद्दों का समाधान। आपके मामले में, AppendingTransformer समान नाम वाली फ़ाइलों को विलय करेगा लेकिन विभिन्न सामग्री के साथ।

कुछ जार में अतिरिक्त संसाधन (जैसे गुण फ़ाइलें) होते हैं जिनके पास एक ही फ़ाइल नाम होता है। ओवरराइटिंग से बचने के लिए, आप उन्हें अपनी सामग्री को एक फ़ाइल में जोड़कर विलय करने का विकल्प चुन सकते हैं।

एक सरल विन्यास लगेगा जैसे:

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-shade-plugin</artifactId> 
      <version>2.4.3</version> 
      <executions> 
       <execution> 
        <phase>package</phase> 
        <goals> 
         <goal>shade</goal> 
        </goals> 
        <configuration> 
         <transformers> 
          <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> 
           <resource>path/to/file/file-name-here</resource> 
          </transformer> 
         </transformers> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 

अद्यतन
आप, आप प्लगइन के रूप में सीधे अपनी आवश्यकताओं को कॉन्फ़िगर कर सकते हैं छाया प्लगइन के लिए एक बाहरी विधानसभा वर्णनकर्ता की जरूरत नहीं है विन्यास।
आपके मामले में, एकत्रित जार से संसाधनों को बाहर करने के लिए, आप shade filters का उपयोग कर सकते हैं।

एक सरल विन्यास (ऊपर एक साथ विलय कर दिया जाना है) दिखाई देगा:

<configuration> 
    <filters> 
     <filter> 
      <artifact>*:*</artifact> 
      <excludes> 
       <exclude>**/*Resources_*</exclude> 
       <exclude>**/*ErrorsText_*</exclude> 
      </excludes> 
     </filter> 
    </filters> 
</configuration> 
+0

मैं खोना करें मैवेन-शेड-प्लगइन के साथ कस्टम असेंबली-डिस्क्रिप्टर लिखने की क्षमता? – leimooo

+0

@replayleif आपकी असेंबली डिस्क्रिप्टर अनुकूलन क्या था? क्या आप इसे अपने प्रश्न या कम से कम इसके प्रासंगिक भाग में जोड़ सकते हैं? –

+0

अनुरोधित जानकारी प्रश्न में शामिल हो गई। – leimooo

0

इसके अलावा इस मुद्दे का सामना करना पड़ा है, मेरी जरूरत निर्भरता मॉड्यूल से बाहर फिल्टर करने के लिए एक ही नाम के संसाधन फ़ाइलों था, की तरह समाधान नीचे:

+०१२३५१६४१०६१:

<plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-shade-plugin</artifactId> 
      <version>2.4.3</version> 
      <executions> 
       <execution> 
        <phase>package</phase> 
        <goals> 
         <goal>shade</goal> 
        </goals> 
        <configuration> 
         <filters> 
          <filter> 
           <artifact>artifact1</artifact> 
           <excludes> 
            <exclude>application.yml</exclude> 
            <exclude>logging.yml</exclude> 
           </excludes> 
          </filter> 
          <filter> 
           <artifact>artifact2</artifact> 
           <excludes> 
            <exclude>application.yml</exclude> 
            <exclude>logging.yml</exclude> 
           </excludes> 
          </filter> 
          <filter> 
           <artifact>*:*</artifact> 
           <excludes> 
            <exclude>META-INF/*.SF</exclude> 
            <exclude>META-INF/*.DSA</exclude> 
            <exclude>META-INF/*.RSA</exclude> 
           </excludes> 
          </filter> 
         </filters> 
        </configuration> 
       </execution> 
      </executions> 
</plugin> 

टिप्पणी नीचे लाइनों संभावित अपवाद से बचने के लिए है

धागा "मुख्य" java.lang.SecurityException में अपवाद: अमान्य हस्ताक्षर फ़ाइल प्रकट मुख्य लिए पचाने विशेषताओं

<filter> 
      <artifact>*:*</artifact> 
      <excludes> 
       <exclude>META-INF/*.SF</exclude> 
       <exclude>META-INF/*.DSA</exclude> 
       <exclude>META-INF/*.RSA</exclude> 
      </excludes> 
</filter> 

मामले में आप चाहते हैं और अधिक जानकारी के, का उल्लेख करने के Selecting Contents for Uber JAR

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