2010-03-28 12 views
29

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

<groupId>org.apache.maven.plugins</groupId> 
<artifactId>maven-compiler-plugin</artifactId> 
<configuration> 
<source>1.6</source> 
<target>1.6</target> 
</configuration> 
पर बीमार हूं

प्रत्येक उत्पन्न pom.xml फ़ाइल में मैं उत्पन्न करता हूं।

क्या इस समस्या को हल करने का कोई आसान तरीका है?

उत्तर

16

केवल एक पोम-केवल (<packaging>pom</packaging>) प्रोजेक्ट बनाएं जिसमें संकलक सेटिंग्स (और कोई अन्य डिफ़ॉल्ट सेटिंग्स) है जो आप चाहते हैं। आप इसे किसी अन्य परियोजना की तरह व्यवहार करते हैं (इसे छोड़ दें; इसे अपने मेवेन रेपो आदि पर तैनात करें)।

अपने पोम फ़ाइलों के शीर्ष पर एक parent घोषणा रखो:

<parent> 
    <groupId><!-- parent's group id --></groupId> 
    <artifactId><!-- parent's artifact id --></artifactId> 
    <version><!-- parent's version --></version> 
</parent> 

यह बहुत मदद नहीं करता है, तो सब आप सेट करना चाहते संकलक सेटिंग्स है। लेकिन अगर आप परियोजना में उसी तरह से कई प्लगइन, रिपोर्ट और निर्भरताओं को कॉन्फ़िगर करते हैं, तो आप उन सभी पर शासन करने के लिए एक माता-पिता बना सकते हैं।

बीटीडब्ल्यू - dependencies और plugins को अपने मूल पोम फ़ाइल में घोषित करने के बारे में सावधान रहें। आमतौर पर आप dependencyManagement और pluginManagement का पक्ष लेना चाहते हैं। अधिक जानकारी के लिए thedocumentation देखें।

+0

अभी तक, केवल समाधान जो मुझे ग्रहण m2e व्यवहार को परेशान करने के लिए मिल सकता है। इस पोस्टिंग के बाद भी 5 साल बाद। क्या मुझे ग्रहण (मर्स) में कुछ याद आ रहा है? –

8

आप अपने ~/.m2/settings.xml में इस प्लगइन और कॉन्फ़िगरेशन को निर्दिष्ट कर सकते हैं, जो इसे सभी परियोजनाओं पर लागू करेगा।

हालांकि इसमें आपकी परियोजनाओं को अब पोर्टेबल बनाने का नकारात्मक हिस्सा नहीं है - उसी कोड को बनाने के लिए उसी pom.xml के साथ एक ही कोड बनाने का प्रयास अन्य मशीनों पर असफल हो जाएगा, जिनके पास settings.xml वैल्यू नहीं हैं।

+1

सेटिंग्स.xml के लिए मेवेन संदर्भ प्लगइन्स को कॉन्फ़िगर करने का कोई तरीका नहीं दिखाता है (http://maven.apache.org/settings.html)। क्या मैं कुछ भूल रहा हूँ? इसके अलावा, मेरे पास सेटिंग्स.xml फ़ाइल (जैसे "project.build.sourceEncoding" संपत्ति और अतिरिक्त गैर-मानक भंडारों में पहले से ही कुछ प्रविष्टियां हैं, इसलिए सेटिंग्स.xml में और अधिक सामग्री जोड़ने के लिए मेरे लिए कोई समस्या नहीं है। –

+0

आप एक प्रोफ़ाइल (डिफ़ॉल्ट रूप से सक्रिय के साथ) स्थापित कर सकते हैं जहां javac प्लगइन में यह मान है। यह उस सेटिंग पृष्ठ पर सूचीबद्ध या उल्लिखित नहीं है लेकिन यह समर्थित है। संदर्भ के लिए m2_home/conf/settings.xml के अंतर्गत वैश्विक सेटिंग्स देखें (आप कर सकते हैं यहां भी सेटिंग निर्दिष्ट करें) –

5

मैं नकल और चिपकाने

हाँ के बीमार हूँ, और आप इस से बचने के लिए पोम inheritance का उपयोग करें और माता पिता पोम maven-compiler-plugin कॉन्फ़िगर करना चाहिए।

एक और विकल्प @matt द्वारा सुझाए गए समाधान का उपयोग करना होगा (और उन्होंने settings.xml के उपयोग के पेशेवरों और विपक्ष को कम किया)।

दोनों ही मामलों में, इस आम तौर पर एक सेटिंग है कि मैं maven-enforcer-plugin और उसके requireJavaVersion नियम यह है कि आप इस तरह से कॉन्फ़िगर का उपयोग करते हुए देखना पसंद करते है:

<project> 
    [...] 
    <build> 
    <plugins> 
    <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-enforcer-plugin</artifactId> 
     <executions> 
      <execution> 
      <id>enforce-versions</id> 
      <goals> 
       <goal>enforce</goal> 
      </goals> 
      <configuration> 
       <rules> 
       <requireJavaVersion> 
        <version>1.6</version> 
       </requireJavaVersion> 
       </rules> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build> 
    [...] 
</project> 

लेकिन यह Maven संस्करण की जांच करने की तरह कुछ कर सकते हैं ()। बहुत उपयोगी।

3

मैं JDK 1,6

साथ संकलित करने के लिए यदि यह बहु मॉड्यूल परियोजना सिर्फ pluginManagement तहत स्तरीय शीर्ष पर पोम इन सेटिंग्स डाल है मेरे सारे Maven संकुल बनाना चाहते हैं।

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

याद रखें ...

यथासंभव सरल बातों का ध्यान रखें, लेकिन कोई सरल

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