9

मेरा प्रश्न this thread में संबोधित किया गया था, लेकिन स्पष्टीकरण स्पष्ट नहीं है।एक्सटेंशन के साथ मेवेन 3 प्रोफाइल

<build> 
    <finalName>${my.project}</finalName> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>2.0</version> 
      <configuration> 
       <source>1.6</source> 
       <target>1.6</target> 
      </configuration> 
     </plugin> 
    </plugins> 
    <extensions> 
     <extension> 
      <groupId>org.kuali.maven.wagons</groupId> 
      <artifactId>maven-s3-wagon</artifactId> 
      <version>1.1.19</version> 
     </extension> 
    </extensions> 
    <resources> 
     <resource> 
      <directory>src/main/resources</directory> 
      <filtering>true</filtering> 
      <includes> 
       <include>**/settings.properties</include> 
      </includes> 
     </resource> 
    </resources> 
</build> 

सूचना है कि मैं Maven-S3-वैगन एक्सटेंशन का उपयोग कर रहा हूँ:

मैं अपने pom.xml फ़ाइलों में से एक में इस बिल्ड परिभाषा नहीं है। अगला, मैं 2 अलग-अलग प्रोफाइल रखना चाहता हूं, प्रत्येक की अपनी सेटिंग्स, प्लगइन्स और एक्सटेंशन के साथ, लेकिन मैवेन प्रोफाइल के तहत एक्सटेंशन टैग की अनुमति नहीं देता है।

जब मैं एक प्रोफ़ाइल का उपयोग कर प्रयास करें:

<profiles> 
    <profile> 
     <id>local-build</id> 
     <activation> 
      <activeByDefault>true</activeByDefault> 
     </activation> 
     <build> 
      <finalName>${my.project}</finalName> 
      <plugins> 
       <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-compiler-plugin</artifactId> 
        <version>2.0</version> 
        <configuration> 
         <source>1.6</source> 
         <target>1.6</target> 
        </configuration> 
       </plugin> 
      </plugins> 
      <extensions> 
       <extension> 
        <groupId>org.kuali.maven.wagons</groupId> 
        <artifactId>maven-s3-wagon</artifactId> 
        <version>1.1.19</version> 
       </extension> 
      </extensions> 
      <resources> 
       <resource> 
        <directory>src/main/resources</directory> 
        <filtering>true</filtering> 
        <includes> 
         <include>**/settings.properties</include> 
        </includes> 
       </resource> 
      </resources> 
     </build> 
    </profile> 
</profiles> 

मैं अपने पोम में कोई त्रुटि मिलती है:

cvc-complex-type.2.4.a: Invalid content was found starting with element 'extensions'. One of '{"http://maven.apache.org/POM/4.0.0":defaultGoal, "http://maven.apache.org/POM/ 
4.0.0":resources, "http://maven.apache.org/POM/4.0.0":testResources, "http://maven.apache.org/POM/4.0.0":directory, "http://maven.apache.org/POM/4.0.0":filters, "http:// 
maven.apache.org/POM/4.0.0":pluginManagement}' is expected. 

प्रश्न तो विस्तार टैग का उपयोग का मतलब है मैं प्रोफ़ाइल का उपयोग नहीं कर सकते? प्रोफ़ाइल के माध्यम से बिल्ड एक्सटेंशन का उपयोग या परिवर्तन कैसे कर सकता हूं?

उत्तर

4

दरअसल, सरकारी Maven POM reference नहीं एक Maven प्रोफ़ाइल के हिस्से के रूप extensions के संभावित उपयोग के बारे में स्पष्ट है, क्योंकि यह कहा गया है कि आप इसे भीतर एक build तत्व हो सकता है है, लेकिन नहीं build खंड के क्या।

हालांकि, आधिकारिक Maven model प्रभावी ढंग से फ़िल्टर करता है और build अनुभाग प्रदान करता है जिसे आप वास्तव में profile अनुभाग में उपयोग कर सकते हैं। और वास्तव में extensions नहीं है।

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

इसलिए, ऐसे परिदृश्य में (यदि आप प्रोफ़ाइल में एक्सटेंशन है या बदलने के लिए एक प्रोफ़ाइल होनी चाहिए/एक एक्सटेंशन जोड़ने) आप निम्नलिखित चाल इस्तेमाल कर सकते हैं:

  • डिफ़ॉल्ट विस्तार के रूप में एक हानिरहित विस्तार है अपने निर्माण के (जहां हानिरहित साधन जो कुछ भी पुस्तकालय जो अपने निर्माण classpath का हिस्सा हो सकता है और अनिवार्य रूप से यह बिल्कुल प्रभावित नहीं)
  • GAV निर्देशांक (जी roupId, एक rtifactId, वी ersion) लाक्षणिक गुणों को है इस विस्तार से

    <project> 
        <modelVersion>4.0.0</modelVersion> 
        <groupId>com.sample</groupId> 
        <artifactId>project</artifactId> 
        <version>0.0.1-SNAPSHOT</version> 
    
        <properties> 
         <extension.groupId>junit</extension.groupId> 
         <extension.artifactId>junit</extension.artifactId> 
         <extension.version>4.11</extension.version> 
        </properties> 
    
        <build> 
         <extensions> 
          <extension> 
           <groupId>${extension.groupId}</groupId> 
           <artifactId>${extension.artifactId}</artifactId> 
           <version>${extension.version}</version> 
          </extension> 
         </extensions> 
        </build> 
    
        <profiles> 
         <profile> 
          <id>customize-extension</id> 
          <properties> 
           <extension.groupId>junit</extension.groupId> 
           <extension.artifactId>junit</extension.artifactId> 
           <extension.version>4.12</extension.version> 
          </properties> 
         </profile> 
        </profiles> 
    
    </project> 
    

    डिफ़ॉल्ट निर्माण (customize-extension प्रोफ़ाइल के बिना सक्रिय: आयन

  • एक प्रोफाइल जो वांछित (उपयोगी) विस्तार

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

आप देख सकते हैं Maven सिर्फ हमारे मामले में जानकारी की जाँच करने के लिए एक बहुत पहले build phase चल रहा है, से इसे ले जाएगा, और डिबग ध्वज सक्षम:

mvn initialize -X 

और निर्माण लॉग के हिस्से के रूप जाँच:

[DEBUG] Populating class realm extension>junit:junit:4.11 
[DEBUG] Included: junit:junit:jar:4.11 

अब हमारे चाल का उपयोग करते हैं: चलो जोड़ने (बदलें) प्रोफ़ाइल के माध्यम से निर्माण विस्तार:

mvn initialize -X -Pcustomize-extension 

और हमारे निर्माण लॉग के हिस्से के रूप में हम होगा:

[DEBUG] Populating class realm extension>junit:junit:4.12 
[DEBUG] Included: junit:junit:jar:4.12 

बिंगो। मेवेन ने एक अलग एक्सटेंशन उठाया (इस मामले में, एक अलग संस्करण, 4.12) और हम प्रोफ़ाइल के माध्यम से विस्तार (या वास्तव में एक सार्थक) निर्माण विस्तार को बदलने में सफल रहे।

0

बस एक पागल विचार: उपयोग मॉड्यूल

इस तरह एक माता पिता pom परिभाषित करें:

<groupId>org.example</groupId> 
<artifactId>my-parent</artifactId> 
<version>1.0</version> 
<packaging>pom</packaging> 
<profiles> 
    <profile> 
     <id>use-pom1</id> 
     <modules> 
      <module>pom1</module> 
     </modules> 
    </profile> 
    <profile> 
     <id>use-pom2</id> 
     <modules> 
      <module>pom2</module> 
     </modules> 
    </profile> 
</profiles> 

pom1 और pom2 पर वांछित एक्सटेंशन को परिभाषित करें।

+0

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

+0

ठीक है, आप descriptor.xml का उपयोग करके 'maven-assembly-plugin' का उपयोग करने का प्रयास कर सकते हैं। लेकिन मुझे संदेह है कि यह आपके एक्सटेंशन के अनुसार करेगा। –

0

मुझे लगता है कि यहाँ समाधान है http://maven.apache.org/guides/mini/guide-using-extensions.html

निर्माण अनुभाग जहां एक्सटेंशन परिभाषित कर रहे हैं और फिर प्रोफ़ाइल विशेषता सच सेट में

<build> 
    <extensions> 
     <extension> 
      <groupId>org.apache.maven.wagon</groupId> 
      <artifactId>wagon-ssh</artifactId> 
      <version>2.9</version> 
     </extension> 
    </extensions> 
</build> 

<profiles> 
    <profile> 
     <id>create-default</id> 
     <activation> 
      <activeByDefault>true</activeByDefault> 
      <property> 
       <name>build</name> 
       <value>full</value> 
      </property> 
     </activation> 
     <build> 
      <plugins> 
       <plugin> 
        <groupId>org.springframework.boot</groupId> 
        <artifactId>spring-boot-maven-plugin</artifactId> 
        <executions> 
         <execution> 
          <goals> 
           <goal>repackage</goal> 
          </goals> 
         </execution> 
        </executions> 
       </plugin> 
      </plugins> 
     </build> 
    </profile> 

    <profile> 
     <id>create-core</id> 
     <activation> 
      <property> 
       <name>build</name> 
       <value>full</value> 
      </property> 
     </activation> 
     <build> 
      <plugins> 
       <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-jar-plugin</artifactId> 
        <extensions>true</extensions> 
        <version>2.6</version> 
        <configuration> 
         <finalName>import-station-core-${project.version}</finalName> 
        </configuration> 
        <executions> 
         <execution> 
          <id>make-jar</id> 
          <phase>package</phase> 
          <goals> 
           <goal>jar</goal> 
          </goals> 
         </execution> 
        </executions> 
       </plugin> 
      </plugins> 
     </build> 
    </profile> 
</profiles> 
संबंधित मुद्दे