5

मैं अपने मेवेन बिल्ड के लिए gitflow-helper-maven-plugin एक्सटेंशन का उपयोग करने की कोशिश कर रहा हूं।निर्मित संस्करण के दौरान मेवेन प्रोफाइल को कैसे सक्षम करें-स्नैपशॉट नहीं है?

इसलिए मैं आदेश जब एक रिलीज़ संस्करण का निर्माण और उन्हें लंघन जबकि एक स्नैपशॉट एक संकलन कुछ अतिरिक्त कदम को चलाने के लिए अपने प्रोजेक्ट कॉन्फ़िगर करने के लिए चाहते हैं, लेकिन मैं अगर ${project.version}-SNAPSHOT शामिल एक प्रोफ़ाइल सक्षम करने के लिए एक तरह से नहीं मिल रहा।

कोई सुझाव?

+0

'स्किप' विकल्प वाले प्लगइन से संबंधित ये अतिरिक्त कदम हैं? –

+0

अब तक अतिरिक्त कदम मेवेन-स्रोत-प्लगइन और मेवेन-जावाडोक-प्लगइन हैं। – conteit86

उत्तर

8

एक संभव दृष्टिकोण है जो कि कैसे आप हमेशा एक Maven निर्माण में एक if बयान अनुकरण सकता है नीचे:

  • उपयोग buid-helper-maven-plugin और पार्स करने के लिए डिफ़ॉल्ट ${project.version} property and create a new $ {अपनी regex-property लक्ष्य केवल SNAPSHOT प्रत्यय के मामले में मूल्य true या ${project.version} के साथ .when.is.snapshot.used} संपत्ति।
  • कॉन्फ़िगर maven-source-plugin ऊपर के रूप में ही इस निष्पादन
  • कॉन्फ़िगर अपने skipSource विकल्प का उपयोग करने और इसे करने के लिए नई (गतिशील) ${only.when.is.snapshot.used} property: in case of snapshot it will have value सच hence skip the execution, otherwise will have value ${project.version} which will be used as FALSE` गुजर और इसलिए छोड़ नहीं maven-javadoc-plugin के लिए एक विशेष विन्यास के साथ अपने jar लक्ष्य निष्पादित करने के लिए इसके skip विकल्प

का उपयोग कर दृष्टिकोण का एक नमूना ऊपर होगा:

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>build-helper-maven-plugin</artifactId> 
    <version>1.10</version> 
    <executions> 
     <execution> 
      <!-- sets the only.when.is.snapshot.used property to true if SNAPSHOT was used, 
       to the project version otherwise --> 
      <id>build-helper-regex-is-snapshot-used</id> 
      <phase>validate</phase> 
      <goals> 
       <goal>regex-property</goal> 
      </goals> 
      <configuration> 
       <name>only.when.is.snapshot.used</name> 
       <value>${project.version}</value> 
       <regex>.*-SNAPSHOT</regex> 
       <replacement>true</replacement> 
       <failIfNoMatch>false</failIfNoMatch> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-source-plugin</artifactId> 
    <version>3.0.1</version> 
    <executions> 
     <execution> 
      <id>create-sources</id> 
      <phase>package</phase> 
      <goals> 
       <goal>jar</goal> 
      </goals> 
      <configuration> 
       <!-- skip when version is SNAPSHOT --> 
       <skipSource>${only.when.is.snapshot.used}</skipSource> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 
<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-javadoc-plugin</artifactId> 
    <version>2.10.4</version> 
    <executions> 
     <execution> 
      <id>create-javadoc</id> 
      <phase>package</phase> 
      <goals> 
       <goal>jar</goal> 
      </goals> 
      <configuration> 
       <!-- skip when version is SNAPSHOT --> 
       <skip>${only.when.is.snapshot.used}</skip> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

यह है कि, प्रोफ़ाइल के लिए कोई ज़रूरत नहीं है, यह कॉन्फ़िगरेशन केवल तब सक्षम होगा जब एक गैर SNAPSHOT संस्करण का उपयोग किया जाएगा, गतिशील रूप से और बिना किसी अन्य कॉन्फ़िगरेशन (कमांड लाइन विकल्प या जो कुछ भी)।


एक पक्ष बता दें कि आप भी maven-release-plugin, प्रभावी रूप से स्रोत और जावाडोक प्लगइन लागू करेगा, जिस पर दिखाई दे सकता है केवल जब performing बिना ऊपर दृष्टिकोण का जोड़ा (मामूली) जटिलता एक रिलीज।

अन्यथा, आप कर सकते थे सरल उपयोग डिफ़ॉल्ट प्रोफ़ाइल Maven Super POM से आ रही है, जो वास्तव में एक ही, स्रोत और जावाडोक प्लगइन आह्वान होता है, और true मूल्य संपत्ति performRelease सेट के माध्यम से सक्रिय किया जा सकता। हालांकि इस दृष्टिकोण चाहिए

mvn clean package -DperformRelease=true 

या

mvn clean package -Prelease-profile 

और आप स्वचालित रूप से डिफ़ॉल्ट सुपर प्रोफ़ाइल से लाभ और स्रोतों और जावाडोक जार उत्पन्न होगा,: यह आप निम्नलिखित आह्वान सकता किसी भी Maven परियोजना पर, है आखिरी विकल्प के रूप में इस्तेमाल किया जाना चाहिए क्योंकि प्रोफ़ाइल को भविष्य में रिलीज में सुपर पोम से हटाया जा सकता है।

+0

इस शानदार प्रतिक्रिया के आधार पर: https://plus.google.com/112346331375070267873/posts/AntD8wE1F3b?hl=es – albfan

0

मैं आपको एक और समाधान सुझाऊंगा।

संस्करण पर प्रोफ़ाइल सक्रियण के बारे में निर्णय लेने के बजाय आप प्रोफ़ाइल में संस्करण क्यों सेट नहीं करते हैं? यहाँ की तरह:

<version>${projectVersion}</version> 

<profiles> 
    <profile> 
     <id>snapshot</id> 
     <activation> 
      <activeByDefault>true</activeByDefault> 
     </activation> 
     <properties> 
      <projectVersion>1.0-SNAPSHOT</projectVersion> 
     </properties> 
    </profile> 
    <profile> 
     <id>release</id> 
     <properties> 
      <projectVersion>1.0-RELEASE</projectVersion> 
     </properties> 
    </profile> 
</profiles> 
+1

विचार gitflow-helper-maven-plugin प्रोजेक्ट बनाने के लिए सीआई सर्वर (जो एमवीएन क्लीन तैनाती को ट्रिगर करता है) में एक ही नौकरी का उपयोग करना है। कलाकृतियों को संकलित करने वाली शाखा के मुताबिक स्नैपशॉट्स, मंच या रिपोजिटरी रिलीज करने के लिए तैनात किया जाता है। संस्करण संस्करणों का उपयोग करके प्रबंधित किया जाता है: एक नई शाखा बनाते समय लक्ष्य निर्धारित करें। – conteit86

+0

इस परिदृश्य में मैं विशिष्ट प्रोफाइल को सक्रिय करने में सक्षम नहीं हूं इसलिए मैं आपके समाधान का उपयोग नहीं कर सकता। – conteit86

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