2010-11-30 14 views
17

मै मैनेज असेंबली प्लगइन के साथ अपना एप्लिकेशन संग्रह बनाउंगा। मेरे पोम में मौजूद सभी निर्भरता बिना किसी समस्या के शामिल हैं।मेवेन असेंबली: उसी आर्टिफैक्ट के विभिन्न संस्करण को जोड़ें

अब मुझे एक ही कलाकृति के दो या दो से अधिक संस्करण शामिल करने की आवश्यकता है।

मेरी पोम में मैं डाल दिया

<dependencies> 
     [...] 
     <dependency> 
      <groupId>db.test</groupId> 
      <artifactId>my-model</artifactId> 
      <version>1.0.3</version> 
     </dependency> 
     <dependency> 
      <groupId>db.test</groupId> 
      <artifactId>my-model</artifactId> 
      <version>1.1.0</version> 
     </dependency> 
</dependencies> 
स्रोत के

dependenvcy समाधानकर्ता पुराने संस्करण को हटा दें और केवल 1.1.0 संग्रह में पैक किया जाता है

मैं विधानसभा का उपयोग करके जार शामिल करने का प्रयास एक्सएमएल डिस्क्रिप्टर फ़ाइल। और मुझे कोई समाधान नहीं मिला।

एक संभावित समाधान मैन्युअल रूप से सभी आवश्यक मॉडल.जर को एक फ़ोल्डर के अंदर रखना होगा और विधानसभा को संग्रह में कॉपी करने के लिए कहेंगे। लेकिन मैं एक और विन्यास योग्य समाधान की तलाश में हूं।

कोई विचार?

+0

आवश्यकता/संघर्ष/.. के बारे में कोई चिंता नहीं। – Vlagorce

उत्तर

12

मुझे हल किए गए पोम निर्भरताओं और अतिरिक्त जार की प्रतिलिपि बनाने के लिए मेवेन-निर्भरता-प्लगइन का उपयोग करके समाधान मिला।

<plugin> 
<groupId>org.apache.maven.plugins</groupId> 
<artifactId>maven-dependency-plugin</artifactId> 
<version>2.1</version> 
<executions> 
    <execution> 
     <id>copy-dependencies</id> 
     <phase>package</phase> 
     <goals> 
      <goal>copy-dependencies</goal> 
     </goals> 
     <configuration> 
      <outputDirectory>${project.build.directory}/lib</outputDirectory> 
      <overWriteReleases>false</overWriteReleases> 
      <overWriteSnapshots>false</overWriteSnapshots> 
      <overWriteIfNewer>true</overWriteIfNewer> 
      <includeScope>runtime</includeScope> 
     </configuration> 
    </execution> 
    <execution> 
     <id>copy-model</id> 
     <phase>package</phase> 
     <goals> 
      <goal>copy</goal> 
     </goals> 
     <configuration> 
      <artifactItems> 
       <artifactItem> 
        <groupId>my.test.pkg</groupId> 
        <artifactId>my-model</artifactId> 
        <classifier>server</classifier> 
        <version>1.0.3</version> 
        <type>jar</type> 
       </artifactItem> 
       <artifactItem> 
        <groupId>my.test.pkg</groupId> 
        <artifactId>my-model</artifactId> 
        <classifier>server</classifier> 
        <version>1.1.0</version> 
        <type>jar</type> 
       </artifactItem> 
      </artifactItems> 
      <outputDirectory>${project.build.directory}/lib</outputDirectory> 
     </configuration> 
    </execution> 
</executions> 

अब मैं सिर्फ अपनी विधानसभा एक्सएमएल में निम्नलिखित लाइनों को जोड़ने के लिए

<fileSet> 
     <directory>${project.build.directory}/lib</directory> 
     <outputDirectory>/lib</outputDirectory> 
     <filtered>false</filtered> 
     <includes> 
      <include>*.jar</include> 
     </includes> 
     <fileMode>0600</fileMode> 
    </fileSet> 
+1

पूछ सकता है कि क्या आप ऐसा करते हैं, जब दोनों संस्करण jvm पर लोड होते हैं, तो क्या कोई संघर्ष नहीं होना चाहिए? –

+0

मेरे पास बिल्कुल वही आवश्यकता थी और आपके समाधान ने समय बचाया था। @lucky_start_izumi - यह ज्यादातर मामलों में करता है, लेकिन मेरे मामले में यह एक ऐसे एप्लिकेशन के लिए है जो YAJSW का उपयोग करता है जिसके लिए पुरानी लाइब्रेरी की आवश्यकता होती है और मेरे एप्लिकेशन को एक नया चाहिए। मेरे परिदृश्य में, वे विभिन्न कक्षाओं पर चलते हैं। –

10

मैवेन मानते हैं कि यह एक बार में एक मॉड्यूल के एक से अधिक संस्करण रखने का कोई अर्थ नहीं है। यह मानता है कि एक नया संस्करण पुराने संस्करण को बदल देता है। यदि ऐसा नहीं है तो यह एक ही मॉड्यूल नहीं है। मेरा सुझाव है कि आप नए मॉड्यूल को एक अलग नाम दें और सुनिश्चित करें कि इसमें एक यादृच्छिक मॉड्यूल चुनने से बचने के लिए अलग-अलग पैकेज हैं।

सामान्य मेवेन में अच्छे एप्लिकेशन डिज़ाइन को प्रोत्साहित करने की कोशिश की गई और जानबूझकर उन चीजों को करना मुश्किल हो गया जो इसे एक बुरा विचार माना जाता है।

+0

इस जार में अलग-अलग पैकेज नाम के साथ अलग-अलग वर्ग हैं। संगतता को वापस रखने के लिए उन्हें अलग-अलग एक्सएमएल मॉडल बनाने के लिए सर्विसलोडर का उपयोग करके लोड किया जाएगा। मुझे लगता है कि मेरे मामले में यह एक बुरा अभ्यास नहीं है। मैं यह देखने की कोशिश करूंगा कि क्या यह संभव है और प्रत्येक रिलीज पर नाम बदलने के लिए उबाऊ नहीं है। – Vlagorce

+2

यदि आप दोनों का उपयोग करने जा रहे हैं, तो मैं नाम दो बदल सकता हूं। –

+0

बेशक हाँ! सब कुछ अलग है केवल groupeid और artifactid वही हैं। – Vlagorce

1

एक और बदसूरत समाधान WAR फ़ाइल ओवरले का उपयोग करने के लिए हो सकता है, इस तथ्य का शोषण कर रहा है कि यह तंत्र ओवरले लागू करते समय घटक JAR फ़ाइलों के संस्करणों पर कोई ध्यान नहीं देता है।

0

मैं मानता हूँ, विभिन्न संस्करणों पुराने एक जगह का मतलब है। अगर हमें कुछ व्यावसायिक आवश्यकता के लिए एक webservice के दो अलग-अलग संस्करणों का उपभोग करना है। विभिन्न पैकेजों में स्टब्स उत्पन्न करना और मेवेन में जोड़ने के दौरान यह एक अच्छा विचार है कि आप groupid में उन्हें अलग-अलग निर्दिष्ट कर सकते हैं। यह काम करना चाहिए।

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