2012-12-13 20 views
14

रपो मैं एक jar तैनात कर सकते हैं का उपयोग करके निम्नलिखित मेरी pom.xml और mvn deploy चल:Maven निर्भरता के साथ जार को तैनात

<distributionManagement> 
    <repository> 
     <id>releases</id> 
     <url>http://${host}:8081/nexus/content/repositories/releases</url> 
    </repository> 
    <snapshotRepository> 
     <id>snapshots</id> 
     <name>Internal Snapshots</name> 
     <url>http://${host}:8081/nexus/content/repositories/snapshots</url> 
    </snapshotRepository> 
</distributionManagement> 

और मैं एक निष्पादन jar-with-dependencies निर्माण का उपयोग कर सकते हैं:

 <plugin> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <executions> 
       <execution> 
        <id>create-executable-jar</id> 
        <phase>deploy</phase> 
        <goals> 
         <goal>single</goal> 
        </goals> 
        <configuration> 
         <descriptorRefs> 
          <descriptorRef>jar-with-dependencies</descriptorRef> 
         </descriptorRefs> 
         <archive> 
          <manifest> 
           <mainClass>my.company.app.Main</mainClass> 
          </manifest> 
         </archive> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 

समस्या यह है कि मुझे नहीं पता कि निष्पादन योग्य jar को मेरे मैवेन रेपो में तैनात करने के लिए इन्हें कैसे सिलाई जाए। मुझे वास्तव में पता नहीं है कि यह एक नई प्लगइन द्वारा पूरा किया गया है या मौजूदा असेंबली प्लगइन में कोई लक्ष्य या अन्य चरण जोड़कर।

+1

पर दोनों जार अपलोड करें दिलचस्प ... तो आप एक सिंगल जार चाहते हैं जिसमें इसकी सभी निर्भरताएं ('जार-निर्भरता ') को नेक्सस में शामिल करें? मुझे लगता है कि जब आप इसे उत्पादन वातावरण में तैनात करते हैं, तो यह जार स्टैंड-अलोन होगा (क्योंकि इसमें इसकी सभी निर्भरताएं अंतर्निहित हैं)? –

उत्तर

0

अनिवार्य रूप से मेरी कठिनाई ने यह तथ्य प्रकट किया कि मेरा pom.xml पहले से ही रेल से बाहर था। सब कुछ अपने आप में जगह पर snapped होगा। मैं पूर्व में कर रहा था: एक lib फ़ोल्डर

  • में

    • सभी सहेजें निर्भरता एक classpath ऊपर slurping कि विधानसभा lib फ़ोल्डर
    • उपयोग प्लगइन एक और परिनियोजन योग्य जार
    बनाने के लिए के साथ एक जार का निर्माण

    मुझे लगता है कि रास्ते में इस तरह के समझ में कई कारण थे, खासकर जब मेरे पुस्तकालय मेरे अनुप्रयोगों से अच्छी तरह से परिचित नहीं थे।

    हालांकि 1 और 2 को हटाकर सभी की आवश्यकता है distributionManagement अनुभाग और तैनाती चरण स्वचालित रूप से काम करता है। तो यह सब कुछ कोड के बड़े स्वामित्व को हटाकर सचमुच कार्यक्षमता जोड़ने का एक अद्भुत मामला है।

  • +3

    मेरे पास * जार-के समान लक्षण था - निर्भरता .jar को तैनाती के साथ धक्का नहीं दिया जा रहा है। मेरी समस्या प्लगइन की गलत कॉन्फ़िगरेशन थी - मुझे दस्तावेज़ों में वर्णित पैकेज चरण से जुड़ना पड़ा (http://maven.apache.org/plugins/maven-assembly-plugin/usage.html) – ahains

    +0

    @ahains धन्यवाद ! यह एक बेहतर समाधान है। कृपया इसका उत्तर दें ताकि मैं वास्तव में आपको ऊपर उठा सकूं :) – Karussell

    3

    निम्नलिखित काम किया। मैं इस सवाल को थोड़ा सा खोलने जा रहा हूं क्योंकि मैं सकारात्मक नहीं हूं यह सबसे अच्छा अभ्यास है, लेकिन काम करना कुछ है।

    समस्याएं मुझे पता है कि मैंने आईडी नाम बनाया है और मुझे नहीं पता कि यह सामान्य अभ्यास है या मुझे जार नाम को कड़ी मेहनत करनी है; यह किसी और चीज से अनुमानित नहीं है।

    <plugin> 
    <artifactId>maven-deploy-plugin</artifactId> 
    <version>2.7</version> 
    <executions> 
        <execution> 
         <id>deploy-executable</id> 
         <goals> 
          <goal>deploy-file</goal> 
         </goals> 
         <configuration> 
          <file>target/Monitoring-Client-1.0-SNAPSHOT-jar-with-dependencies.jar</file> 
         </configuration> 
        </execution> 
    </executions> 
    </plugin> 
    
    +0

    अच्छा लग रहा है, लेकिन दुर्भाग्य से मेरे लिए काम नहीं करता है: लक्ष्य org.apache.maven.plugins निष्पादित करने में विफल: maven-deploy-plugin: 2.8.2: प्रोजेक्ट बैकऑफिसस्मोकटेस्ट पर तैनाती फ़ाइल (डिफ़ॉल्ट-क्ली): पैरामीटर फ़ाइल ',' url 'लक्ष्य org.apache.maven.plugins के लिए: maven-deploy-plugin: 2.8.2: तैनाती-फ़ाइल गुम या अमान्य है -> [सहायता 1] –

    4

    आदेश में एक (तथाकथित) Über जार का निर्माण और Maven का उपयोग कर, आप भी shade plugin इस्तेमाल कर सकते हैं यह तैनात करने के लिए में। निम्नलिखित कोड उनकी वेबसाइट से लिया गया है लेकिन मैंने इस सुविधा का उपयोग करके एक या दो परियोजनाएं की हैं।

    <project> 
        ... 
        <build> 
        <plugins> 
         <plugin> 
         <groupId>org.apache.maven.plugins</groupId> 
         <artifactId>maven-shade-plugin</artifactId> 
         <version>2.0</version> 
         <executions> 
          <execution> 
          <phase>package</phase> 
          <goals> 
           <goal>shade</goal> 
          </goals> 
          <configuration> 
           <shadedArtifactAttached>true</shadedArtifactAttached> 
           <shadedClassifierName>jackofall</shadedClassifierName> <!-- Any name that makes sense --> 
          </configuration> 
          </execution> 
         </executions> 
         </plugin> 
        </plugins> 
        </build> 
        ... 
    </project> 
    

    इस विन्यास में आप सामान्य जार के अलावा एक तैनाती के रूप में Über जार मिलता है। आपके जेएआर के उपयोगकर्ता क्लासिफायरफायर के आधार पर निर्भरताओं के साथ ऑल-इन-वन पैकेज या जेएआर को खींचने का निर्णय ले सकते हैं।

    मैं आम तौर पर Über JARs बनाने के लिए छाया प्लगइन का उपयोग करता हूं (या एक तरह से जार को संशोधित करता हूं) और स्थापना पैकेज जैसे चीजों को बनाने के लिए असेंबली प्लगइन का उपयोग करता हूं (जेएआर और संभवतः अन्य चीजें)। मुझे यकीन नहीं है कि एकल प्लगइन्स के लक्षित लक्ष्य क्या हैं।

    0

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

    3

    आप पैकेजिंग चरण के लिए विधानसभा के लिए बाध्य है, यह अपने भंडार में दोनों "नियमित" जार और साथ-निर्भरता जार स्थापित हो जाएगा जब आप एक निर्माण कार्य करें:

    <plugin> 
         <artifactId>maven-assembly-plugin</artifactId> 
         <configuration> 
          <archive> 
           <manifest> 
            <mainClass>my.company.app.Main</mainClass> 
           </manifest> 
          </archive> 
          <descriptorRefs> 
           <descriptorRef>jar-with-dependencies</descriptorRef> 
          </descriptorRefs> 
         </configuration> 
         <executions> 
          <execution> 
           <id>make-assembly</id> <!-- this is used for inheritance merges --> 
           <phase>package</phase> <!-- bind to the packaging phase --> 
           <goals> 
            <goal>single</goal> 
           </goals> 
          </execution> 
         </executions> 
        </plugin> 
    

    Thenn बस mvn clean install deploy चलाने अपने रेपो

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