2009-12-30 12 views
66

में मॉड्यूल के संस्करण के रूप में project.parent.version का उपयोग करने पर चेतावनी मेवेन मल्टी-मॉड्यूल प्रोजेक्ट्स में जहां मैं चाहता हूं कि प्रत्येक मॉड्यूल हमेशा माता-पिता के समान संस्करण बनाए रखें, मैंने आमतौर पर कुछ ऐसा किया है मॉड्यूल के pom.xml में निम्नलिखित:मैवेन 3

<parent> 
    <groupId>com.groupId</groupId> 
    <artifactId>parentArtifactId</artifactId> 
    <version>1.1-SNAPSHOT</version> 
    </parent> 

    <groupId>com.groupId</groupId> 
    <artifactId>artifactId</artifactId> 
    <packaging>jar</packaging> 
    <version>${project.parent.version}</version> 
    <name>name</name> 

जब से मैं Maven 3.0-अल्फा 5 उपयोग शुरू कर दिया है, मैं ऐसा करने के लिए निम्न चेतावनी मिलता है।

[WARNING] 
[WARNING] Some problems were encountered while building the effective model for com.groupid.artifactId:name:jar:1.1-SNAPSHOT 
[WARNING] 'version' contains an expression but should be a constant. @ com.groupid.artifactId:name::${project.parent.version}, /Users/whaley/path/to/project/child/pom.xml 
[WARNING] 
[WARNING] It is highly recommended to fix these problems because they threaten the stability of your build. 
[WARNING] 
[WARNING] For this reason, future Maven versions might no longer support building such malformed projects. 
[WARNING] 

मैं, पता है कि माता-पिता संस्करण के लिए एक मॉड्यूल के संस्करण बांधने के साथ वास्तविक समस्या है उत्सुक हूँ, यदि कोई हो? या यह किसी भी अभिव्यक्ति के दौरान एक सामान्य चेतावनी का मामला है, भले ही यह project.parent.version है, संस्करण तत्व के लिए उपयोग किया जाता है।

उत्तर

77

I'm curious to know what the real problem with tying a module's version to the parent version is, if any? Or is this a case of a general warning when any expression, regardless of whether it's project.parent.version, is used for the version element.

अच्छा, परीक्षण करना आसान होगा। क्योंकि मैं उत्सुक था, मैं तो बस आप के लिए यह किया निम्नलिखित पोम का उपयोग कर:

<project> 
    <modelVersion>4.0.0</modelVersion> 
    <parent> 
    <artifactId>parent</artifactId> 
    <groupId>com.mycompany</groupId> 
    <version>1.0-SNAPSHOT</version> 
    </parent> 
    <groupId>com.mycompany</groupId> 
    <artifactId>module</artifactId> 
    <version>${myversion}</version> 
    <name>module</name> 
    <url>http://maven.apache.org</url> 
    <properties> 
    <myversion>1.0-SNAPSHOT</myversion> 
    </properties> 
    ... 
</project> 

और Maven वास्तव में शिकायत कर रहा है:

[WARNING] 'version' contains an expression but should be a constant. @ com.mycompany:module:${myversion}, /home/pascal/Projects/maven-maven3-testcase/module/pom.xml 

ईमानदारी से कहूं तो मुझे लगता है कि Maven यहीं है, ऐसा नहीं <version> तत्व (कम से कम प्रोजेक्ट.वर्जन के लिए नहीं) के लिए किसी संपत्ति का उपयोग करने के लिए अधिक समझदारी नहीं है और यह अच्छा है कि मैवेन इसके बारे में शिकायत कर रहा है।

और तुम उप मॉड्यूल में माता-पिता पोम संस्करण का उपयोग करने, सिर्फ बच्चे poms से <version> टैग निकालना चाहते हैं, वे माता पिता से संस्करण प्राप्त कर लेगा। वर्तमान में आप जो कर रहे हैं वह बेकार है।

+2

बस यहां आपके बोल्ड किए गए उत्तर को यहां दस्तावेज़ित किया गया: http://maven.apache.org/guides/introduction/introduction-to-the-pom.html#Project_Inheritance। मेवेन में यह तरीका बताया गया था: परिभाषित मार्गदर्शिका, लेकिन जब मैंने इसे पढ़ा था तब मैंने उस पर चमक उठी। सुधारों के लिए धन्यवाद। – whaley

+11

http://jira.codehaus.org/browse/MNG-4715 में उदाहरण तत्व के लिए संपत्ति का उपयोग करने के कुछ वैध कारण प्रतीत होते हैं, इसलिए मुझे विश्वास नहीं है कि इसके लिए कोई उपयोग नहीं है, लेकिन +1 के लिए हमें याद दिलाते हुए कि यदि आप पैरेंट पोम संस्करण का उपयोग करने के लिए submodules चाहते हैं, तो बस टैग को हटा दें और विरासत का काम करें। – metamatt

+1

स्प्रिंग रू 1.3.0.BUILD-SNAPSHOT के रूप में यदि आप बच्चे के पोम से ' '-टैग हटाते हैं, तो यह शिकायत करना शुरू कर देगा कि' संस्करण के लिए आवश्यक है ... '। लेकिन वह स्प्रिंग रू की गलती है, मैवेन नहीं। मेवेन संस्करण-टैग के बिना बस ठीक काम कर रहा है। –