2012-05-01 11 views
6

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

मैं जार के अंतिम नाम को लेन नाम (देव, मंच, प्रोड, आदि) कैसे शामिल करूं? -> WS-क्लाइंट-DEV.jar

  • mvn साफ स्थापित

    • mvn स्वच्छ -पी देव स्थापित:

      मैं निम्नलिखित mvn चाहें जार कि कुछ इस तरह दिखाई में परिणाम के लिए आदेश -पी चरण -> WS-क्लाइंट-STAGE.jar

    • mvn स्वच्छ -पी ठेस स्थापित -> WS-क्लाइंट-PROD.jar

    वहाँ एक Maven संपत्ति कहीं मैं नहीं मिल सकता है? यदि संभव हो तो मैं एक अनावश्यक कमांड लाइन तर्क का उपयोग करना टालना चाहूंगा (यानी - 'mvn clean install -P DEV -Dlane = DEV')।

    <plugin> 
        <artifactId>maven-assembly-plugin</artifactId> 
        <version>2.2.2</version> 
        <executions> 
         <execution> 
          <id>jar-with-dependencies</id> 
          <phase>package</phase> 
          <goals> 
           <goal>single</goal> 
          </goals> 
         </execution> 
        </executions> 
        <configuration> 
         <descriptorRefs> 
          <descriptorRef>jar-with-dependencies</descriptorRef> 
         </descriptorRefs> 
         <finalName>ws-client</finalName> 
         <appendAssemblyId>false</appendAssemblyId> 
         <archive> 
          <manifest> 
           <mainClass>Example</mainClass> 
          </manifest> 
         </archive> 
        </configuration> 
    </plugin> 
    
  • उत्तर

    9

    भास्कर के समान लेकिन थोड़ा संशोधित।

    < निर्माण > टैग के बाद, जोड़ने

    <finalName>${project.artifactId}-${lane}</finalName> 
    

    आप प्रोफ़ाइल में एक संपत्ति के रूप में लेन मूल्य निर्धारित कर सकते हैं।

    <profiles> 
        <profile> 
         <id>DEV</id> 
         <properties> 
          <lane>DEV</lane> 
         </properties> 
        </profile> 
    </profiles> 
    

    फिर निर्माण पर अमल आप की तरह कहते हैं: mvn ... -पी देव (जैसे mvn स्वच्छ -पी देव स्थापित)

    +0

    शानदार, खूबसूरती से काम किया! – chadmaughan

    +0

    अंतिम नाम केवल आपके आर्टिफैक्ट पर तैनात आर्टिफैक्ट पर काम नहीं करेगा जो आपके वर्तमान रन में लक्षित फ़ोल्डर में संग्रहीत है। – khmarbaise

    +0

    @khmarbaise - सही। इस विशेष उपयोग के लिए, जार को एक भंडार के बाहर वितरित किया जा रहा है (मुझे पता है, आदर्श नहीं)। मैं एक दृश्य संकेत चाहता था ताकि "मावेरलेस" उपभोक्ता जानता है कि वे अपने वर्गपैठ पर जार फ़ाइल पर बस देखकर किस लेन और गुणों का उपयोग कर रहे हैं। – chadmaughan

    2

    < निर्माण > टैग के बाद, जोड़ने

    <finalName>${project.artifactId}-${lane}</finalName> 
    

    और जैसे प्रोफ़ाइल नाम के लिए "लेन" env चर सेट:

    यहाँ मेरी विधानसभा प्लगइन विन्यास है

    mvn -पी देव -Dlane = देव आदि

    या आप थोड़ा और अधिक रचनात्मक हो सकता है और यहां बताए अनुसार Maven - Can I reference profile id in profile definition?

    संपादित ------

    सक्रिय प्रोफ़ाइल आईडी खोज कर सकते हैं

    यदि आप अनावश्यक तर्कों से बचना चाहते हैं।

    एनवी का उपयोग करके संबंधित प्रोफाइल को ट्रिगर क्यों न करें। संपत्ति।

    तो कमांड लाइन

    mvn -Dlane=DEV|STAGE|PROD 
    

    पर और पोम

    <profile> 
        <id>DEV</id> 
        <activation> 
        <property> 
         <name>lane</name> 
         <value>DEV</value> 
        </property> 
        </activation> 
        <build> 
        // rest of the profile 
    </profile> 
    

    और मंच और उत्पादन प्रोफाइल के लिए एक ही में

    +0

    जवाब के लिए धन्यवाद।यदि संभव हो तो मैं एक अनावश्यक कमांड लाइन तर्क का उपयोग करना टालना चाहता था (मैंने इसे प्रदर्शित करने के लिए अपना प्रश्न अपडेट कर दिया है)। आपका प्रदत्त लिंक दिलचस्प है। एक एमवीएन संपत्ति के माध्यम से निर्दिष्ट कमांड लाइन निर्दिष्ट (सक्रिय) प्रोफाइल को संदर्भित करने के बारे में कोई विचार? – chadmaughan

    +0

    redunduncy से बचने के बारे में अधिक जानकारी के साथ संपादित –

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