2012-01-02 21 views
12

Tôi muốn xác định một kho lưu trữ cục bộ trong dự án maven của mình.làm thế nào để có được siêu pom basedir trong một mô-đun con pom?

Tôi có siêu mô-đun và một vài mô-đun con. cấu trúc tập tin của tôi là:

/root 
    /repository 
    /child 
     pom.xml 
    pom.xml 

trong pom siêu của tôi, tôi xác định:

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

Vấn đề là trong pom con tôi, kho theo quy định tại pom siêu của tôi đề cập đến/root/con/kho và như vậy, không thể tìm thấy các phụ thuộc ...

Có cách nào để xác định đường dẫn luôn luôn liên quan đến siêu pom không?

Nếu không, cách tốt nhất để giải quyết vấn đề là gì?

+0

Vì vậy, bạn muốn tạo kho mỗi dự án? Có lẽ '$ {project.parent.relativePath}' sẽ được phân giải (cộng với bạn phải định nghĩa '' trong tất cả các POM con bạn). –

Trả lời

4

${project.parent.basedir} nên thực hiện công việc.

Hoặc bạn có thể đặt đường dẫn gốc của gốc trong thuộc tính, vì vậy nó sẽ được kế thừa. Một cái gì đó như thế này trong Phụ Huynh

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

Và trong Child

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

cảm ơn câu trả lời của bạn nhưng $ {basedir} trong pom mẹ không chạy vì nó được thay thế bằng đường dẫn con pom và $ {project.parent.basedir} không bao giờ được giải thích –

+2

True. Thuộc tính đầu tiên được hợp nhất từ ​​cha mẹ, sau đó được xử lý. –

4

Trong trường hợp này, lúc đầu bạn có thể thử ${project.parent.basedir}.
Dường như nó không hoạt động, cách đơn giản (và nguyên gốc) là sử dụng đường dẫn hoàn chỉnh (/ root/...) hoặc thử đường dẫn tương đối (../) thay vì sử dụng biến $ {basedir}.

Nhưng đối với tôi, giải pháp tuyệt vời sẽ được bên ngoài cấu hình này thành tệp thuộc tính.
Bạn có thể sử dụng thuộc tính-maven-plugin (http://mojo.codehaus.org/properties-maven-plugin/plugin-info.html).

Với plugin này, các thuộc tính được xác định trên tệp thuộc tính có thể được đọc giống như các thuộc tính được xác định bên trong pom.xml.

Từ trang web plugin:

Nếu bạn có một tập tin thuộc tính được gọi là teams.properties với nội dung này:

toronto=raptors 
miami=heat 

sẽ được giống như tuyên bố sau đây trong pom.xml của bạn:

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

Tôi đã giải quyết vấn đề này nhiều lần với plugin groovy. Thêm một tập tin được gọi là "basepath_marker" vào thư mục của siêu pom của bạn và thêm sau đây để pom của bạn. Bạn có thể truy cập thuộc tính như sau: $ {base-path}. Đọc this blog post để biết thêm chi tiết.

Ví dụ:

... 
<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> 
... 
Các vấn đề liên quan