2009-08-25 16 views
15

मैं इसमें कुछ कक्षाओं के साथ कई जार बनाने के लिए असेंबली प्लगइन का उपयोग करता हूं। app_business.jarapp_gui.jarcore.jar आदिमेवेन-असेंबली-प्लगइन: कस्टम जार फ़ाइल नाम

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

<plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <configuration> 
     <appendAssemblyId>false</appendAssemblyId> 
    <finalName>app_business</finalName> 
     <descriptors> 
      <descriptor>assembly.xml</descriptor> 
     </descriptors> 
     <attach>true</attach> 
    </configuration> 
    <executions> 
     <execution> 
      <id>make-assembly</id> 
      <phase>package</phase> 
      <goals> 
       <goal>single</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 

एक assembly.xml फ़ाइल मैं जिसके परिणामस्वरूप जार के लिए कस्टम नाम की जरूरत है :

<assembly> 
     <id>app_business</id> 
     <formats> 
     <format>jar</format> 
     </formats> 
     <baseDirectory>target</baseDirectory> 
     <includeBaseDirectory>false</includeBaseDirectory> 

     <fileSets> 
     <fileSet> 
      <directory>${project.build.outputDirectory}</directory> 
      <outputDirectory></outputDirectory> 
      <includes> 
      <include>org/xyz/**</include> 
      </includes> 
     </fileSet>  
     </fileSets> 
    </assembly> 

यह एक फ़ाइल app_business.jar जो सही है बनाता है । लेकिन मुझे नहीं पता कि मेरी दूसरी फाइलें कैसे बनाएं। विकल्प appendAssemblyId मेरी मदद नहीं करता है, क्योंकि यह AppName-app_business.jar प्रारूप में फ़ाइल नाम बनाता है। मुझे वास्तव में सटीक फाइलनाम app_business.jar की आवश्यकता है।

कोई विचार? आपका बहुत बहुत धन्यवाद!

उत्तर

-1

मानक मेवेन प्लगइन्स सामान्य, दोहराव वाले काम के लिए हैं। वे पीओएम से सभी जानकारी इकट्ठा करते हैं और वे स्मार्ट होते हैं (इस अर्थ में कि आपको ज्यादा कॉन्फ़िगर करने की आवश्यकता नहीं है)।

यदि आपको विशेष कार्यों की आवश्यकता है, तो मैं ant plugin का उपयोग करने का सुझाव देता हूं जो आपको पीओएम में एंट कोड का एक टुकड़ा एम्बेड करने की अनुमति देता है। यह आपको jar task चलाने की अनुमति देता है।

+0

मुझे चींटी और मेवेन कार्यों को मिश्रण करना पसंद नहीं है। वैसे भी, चींटी कार्यों का उपयोग करने से बहुत कम xml-config की आवश्यकता होती है। (मेरे काम के लिए लगभग 20 लाइनें) – Synox

+3

@ सिनोक्स, आपको एंट्रिन प्लगइन से नहीं बचना चाहिए, यह आपकी खुद की प्लगइन को घुमाने के बिना मेवेन में अंतराल को भरना बहुत उपयोगी है। मुझे लगता है कि लोग इसका उपयोग करने के लिए बहुत उत्सुक हैं जब अधिक मेवेनिक (जो कुछ भी, पाइथनिक के बराबर मेवेन) होता है। इस मामले में मुझे लगता है कि असेंबली प्लगइन * एक बेहतर फिट होना चाहिए, लेकिन जैसा कि आप मेरे उत्तर से देख सकते हैं, वहां अभी भी कुछ समस्याएं हैं जो ओपी चाहता है ठीक उसी तरह काम करना बंद कर दें। –

+0

चींटी का उपयोग कर मेवेन प्लगइन रोल करना आसान है। –

38

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

<plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <executions> 
    <execution> 
     <id>make-business-assembly</id> 
     <phase>package</phase> 
     <goals> 
     <goal>single</goal> 
     </goals> 
     <configuration> 
     <appendAssemblyId>false</appendAssemblyId> 
     <finalName>app_business</finalName> 
     <descriptors> 
      <descriptor>src/main/assembly/business-assembly.xml</descriptor> 
     </descriptors> 
     <attach>true</attach> 
     </configuration> 
    </execution> 
    <execution> 
     <id>make-gui-assembly</id> 
     <phase>package</phase> 
     <goals> 
     <goal>single</goal> 
     </goals> 
     <configuration> 
     <appendAssemblyId>false</appendAssemblyId> 
     <finalName>app_gui</finalName> 
     <descriptors> 
      <descriptor>src/main/assembly/gui-assembly.xml</descriptor> 
     </descriptors> 
     <attach>true</attach> 
     </configuration> 
    </execution> 
    </executions> 
</plugin> 
इस कॉन्फ़िगरेशन के साथ

, दो अतिरिक्त जार (एप्लिकेशन _business.jar और एप्लिकेशन _gui.jar) बनाया जाएगा:

यहाँ दो फांसी, प्रत्येक संदर्भित एक अलग विधानसभा साथ संशोधित विन्यास का एक उदाहरण है लक्ष्य निर्देशिका में, हालांकि यदि आप प्रोजेक्ट इंस्टॉल करते हैं तो जागरूक रहें, केवल एकत्रित अंतिम आर्टिफैक्ट स्थापित किया जाएगा (यह निश्चित रूप से एक समस्या हो सकती है)।

इससे बचने के लिए आपको appendAssemblyId गुणों को सच में बदलने की आवश्यकता होगी। इस मामले में सबसे नज़दीक आप अंतिम नाम को "ऐप" और आईडी "गुई" और "व्यवसाय" में बदलना चाहते हैं, जिसके परिणामस्वरूप ऐप-gui.jar और ऐप-व्यवसाय .jar पैक किया जा रहा है और सभी कलाकृतियों को स्थापित किया जा रहा है।

+0

अरे वास्तव में तेज़ उत्तर के लिए धन्यवाद! यह काम करता है।जैसा कि आपने कहा था कि कंसोल पर चेतावनियां हैं, और अंतिम आर्टिफैक्ट मुख्य आर्टिफैक्ट बन जाता है। मैं इसके साथ रह सकता हूं, लेकिन मुझे कंसोल पर चेतावनियां पसंद नहीं आईं। क्या उन्हें छिपाने का कोई तरीका है (या ऐसा करने के लिए असेंबली कॉन्फ़िगर करें)? – Synox

+0

चेतावनियां क्या हैं? मेरे उत्तर का अंतिम भाग मुख्य आर्टिफैक्ट समस्या को संबोधित करता है, यदि आप अंडरस्कोर से हाइफ़न –

+1

में बदलने के लिए खड़े हो सकते हैं चेतावनी: [चेतावनी] कॉन्फ़िगरेशन विकल्प: 'appendAssemblyId' को गलत पर सेट किया गया है, और 'क्लासिफायर' गायब है । असेंबली फ़ाइल को जोड़ने के बजाय: ... \ app_business.jar, यह मुख्य प्रोजेक्ट आर्टिफैक्ट के लिए फ़ाइल बन जाएगा। नोट: यदि इस प्रोजेक्ट के लिए एकाधिक वर्णनकर्ता या वर्णनकर्ता-प्रारूप प्रदान किए जाते हैं, तो इस फ़ाइल का मान गैर-निर्धारक होगा! [चेतावनी] प्री-मौजूदा प्रोजेक्ट मुख्य-आर्टिफैक्ट फ़ाइल को प्रतिस्थापित करना: ... \ app_gui.jar असेंबली फ़ाइल के साथ: .... \ app_gui.jar मैं अंडरस्कोर से हाइफ़ेंस में बदलने से बचना चाहता हूं। लेकिन अगर मैं इससे बच नहीं सकता ... यह समाधान काफी अच्छा है। – Synox

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