2012-01-02 14 views
12

मैं अपने मैवेन प्रोजेक्ट में एक स्थानीय भंडार को परिभाषित करना चाहता हूं।एक बच्चे मॉड्यूल पोम में सुपर पोम आधारित कैसे प्राप्त करें?

मुझे एक सुपर पोम और कई बाल मॉड्यूल मिल गए हैं। मेरे फ़ाइल संरचना है:

/root 
    /repository 
    /child 
     pom.xml 
    pom.xml 
मेरी सुपर पोम में

मैं परिभाषित:

<repository> 
    <id>my-local-repo</id> 
    <url>file://${basedir}/repository</url> 
</repository> 

समस्या यह है कि मेरे बच्चे पोम में, भंडार मेरी सुपर पोम में परिभाषित करने के लिए/जड़/बच्चे/भंडार संदर्भित करता है और इसलिए, निर्भरता नहीं मिल सकती ...

क्या सुपर पोम के सापेक्ष हमेशा पथ को परिभाषित करने का कोई तरीका है?

यदि नहीं, तो समस्या को हल करने का सबसे अच्छा तरीका क्या है?

+0

तो तुम भंडार-प्रति-परियोजना बनाना चाहते हैं? हो सकता है कि '$ {project.parent.relativePath}' हल करने योग्य होगा (साथ ही आपको अपने सभी बच्चे पीओएम में '' को परिभाषित करना होगा)। –

उत्तर

4

${project.parent.basedir} नौकरी करना चाहिए।

या आप किसी संपत्ति में रूट के आधार-पथ को सेट कर सकते हैं, इसलिए यह विरासत में मिलेगा। जनक

<properties> 
    <rootPath>${basedir}</rootPath> 
</properties> 

में और बाल

<repository> 
    <id>my-local-repo</id> 
    <url>file://${rootPath}/repository</url> 
</repository> 
+3

आपके उत्तर के लिए धन्यवाद लेकिन पेरेंट पोम में $ {basedir} नहीं चलता है क्योंकि इसे बाल पोम पथ और $ {project.parent.basedir} द्वारा प्रतिस्थापित किया जाता है, कभी भी –

+2

सही नहीं समझा जाता है। गुण पहले माता-पिता से विलय किए जाते हैं, फिर संसाधित होते हैं। –

4

इस मामले में में कुछ इस तरह, पहले आप कम से ${project.parent.basedir} की कोशिश कर सकते।
जैसा कि ऐसा लगता है कि यह काम नहीं करता है, सरल (और मूल) तरीका पूर्ण पथ (/ root/...) का उपयोग करता है या $ {basedir} चर का उपयोग करने के बजाय सापेक्ष पथ (../) का प्रयास करता है।

लेकिन मेरे लिए, एक महान समाधान इस कॉन्फ़िगरेशन को गुण फ़ाइल में बाहरी कर देगा।
आप गुण-मैवेन-प्लगइन (http://mojo.codehaus.org/properties-maven-plugin/plugin-info.html) का उपयोग कर सकते हैं।

इस प्लगइन के साथ, गुण फ़ाइल पर परिभाषित गुणों को pom.xml के अंदर परिभाषित गुणों की तरह पढ़ा जा सकता है।

प्लगइन साइट से:

आप इस सामग्री के साथ teams.properties नामक एक गुण फ़ाइल है, तो:

toronto=raptors 
miami=heat 

अपने pom.xml में निम्नलिखित की घोषणा के रूप में ही होगा:

<properties> 
    <toronto>raptors</toronto> 
    <miami>heat</miami> 
</properties> 
0

मैंने इस बार कई बार groovy प्लगइन के साथ हल किया। अपने सुपर पोम की निर्देशिका में "basepath_marker" नामक एक फ़ाइल जोड़ें और अपने पोम में निम्नलिखित जोड़ें। आप इस तरह की संपत्ति का उपयोग कर सकते हैं: $ {base-path}। अधिक जानकारी के लिए this blog post पढ़ें।

उदाहरण:

... 
<build> 
    <plugins> 
     <plugin> 
      <groupId>org.codehaus.gmaven</groupId> 
      <artifactId>groovy-maven-plugin</artifactId> 
      <executions> 
       <!-- set absolute base path from super pom --> 
       <execution> 
        <id>find-basepath</id> 
        <phase>validate</phase> 
        <goals> 
         <goal>execute</goal> 
        </goals> 
        <configuration> 
         <source> 
          <![CDATA[ 
           import java.io.File; 
           log.info('## define projects super pom absolute path through basepath_marker') 
           String p = "basepath_marker"; 
           File f = null; 
           if(p != null) { 
            def _max_child_poms = 0 
            while(_max_child_poms++ < 5) { 
             f = new File(p); 
             if(f.exists()) { 
              break; 
             } 
             p = "../" + p;         
            } 
           } 
           if(f != null) { 
            String basePath = f.getCanonicalPath(); 
            basePath = basePath.substring(0, basePath.lastIndexOf(File.separator)); 
            project.properties['base-path'] = basePath.replace('\\' , '/'); 
            log.info(' - used base path = ' + project.properties['base-path']); 
           } else { 
            log.error('Could not find basepath_marker marker file!'); 
            System.stop(0); 
           } 
          ]]> 
         </source> 
        </configuration> 
       </execution>      
      </executions> 
     </plugin> 
    </plugins> 
</build> 
... 
संबंधित मुद्दे