2012-07-16 26 views
54

Làm cách nào để truy cập các thuộc tính maven được xác định trong pom trong một dự án maven bình thường và trong một dự án plugin maven?Truy cập các thuộc tính maven được xác định trong pom

+1

Những loại thông tin nào khiến bạn quan tâm? Nếu nó chỉ là phiên bản hoặc những thứ tương tự, thì có thể là một ý tưởng hay hơn để [đặt nó vào tệp kê khai và đọc nó từ đó] (http://stackoverflow.com/questions/2712970/how-to-get-maven-artifact- phiên bản-thời gian chạy/2713013 # 2713013). –

+0

Có rất nhiều bài đăng trong Stack Overflow về điều này: http://stackoverflow.com/search?q=read+pom+in+java, ít nhất, hãy xem trước khi đăng bài. Người chỉnh sửa SO sẽ hiển thị chúng. Google cũng thế. –

+0

Xin cảm ơn các bạn. Bây giờ tôi nhận ra điều này thực sự tồi tệ. Gonna thử cách tiếp cận khác. –

Trả lời

0

Bạn có thể phân tích cú pháp tệp pom bằng JDOM (http://www.jdom.org/).

6

Maven đã có một giải pháp để làm những gì bạn muốn:

Get MavenProject from just the POM.xml - pom parser?

btw: đầu tiên đánh vào google tìm kiếm;)

Model model = null; 
FileReader reader = null; 
MavenXpp3Reader mavenreader = new MavenXpp3Reader(); 

try { 
    reader = new FileReader(pomfile); // <-- pomfile is your pom.xml 
    model = mavenreader.read(reader); 
    model.setPomFile(pomfile); 
}catch(Exception ex){ 
    // do something better here 
    ex.printStackTrace() 
} 

MavenProject project = new MavenProject(model); 
project.getProperties() // <-- thats what you need 
+1

Câu trả lời liên kết đơn không được khuyến khích ở đây (chủ yếu là vì chúng có thể trở thành vô dụng khi tài nguyên được liên kết biến mất). Ít nhất bạn nên tóm tắt thông tin từ liên kết đến bài đăng tại đây. –

+0

Tôi vô tình đăng liên kết sai, một bài đăng trên stackoverflow của nó, điều đó không nên biến mất;) – SWoeste

+0

Nhưng tôi đồng ý với bạn, chỉ một liên kết là một chút khó chịu. Vì vậy, dựa trên các nguồn từ liên kết tôi đã thêm một số ý kiến ​​và phương pháp gọi bạn đang tìm kiếm (dòng cuối cùng). – SWoeste

4

Điều này có thể được thực hiện với tính chất java tiêu chuẩn kết hợp với maven0-resource-plugin với tính năng lọc được bật trên các thuộc tính. Để biết thêm thông thấy

http://maven.apache.org/plugins/maven-resources-plugin/examples/filter.html

này sẽ làm việc cho dự án maven tiêu chuẩn như đối với Plugin dự án

15

Thiết lập một System variable from Maven và sử dụng java following call

System.getProperty("Key"); 
+0

liên kết bị hỏng, Bạn có thể sửa chữa nó không? –

+0

Sửa lỗi liên kết bị hỏng. – Santosh

+5

Điều này sẽ chỉ hoạt động nếu bạn đang chạy kết quả xây dựng từ Maven, có lẽ bằng cách sử dụng maven-exec-plugin. Nếu bạn chỉ sử dụng Maven để biên dịch mã, điều này sẽ không hoạt động. –

46

Sử dụng properties-maven-plugin để viết ra cụ thể pom properties vào một tệp tại thời gian biên dịch, và sau đó đọc tệp đó tại thời gian chạy.

Trong bạn pom.xml:

<properties> 
    <name>${project.name></name> 
    <version>${project.version}</version> 
    <foo>bar</foo> 
</properties> 

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>properties-maven-plugin</artifactId> 
      <version>1.0-alpha-2</version> 
      <executions> 
       <execution> 
        <phase>generate-resources</phase> 
        <goals> 
         <goal>write-project-properties</goal> 
        </goals> 
        <configuration> 
         <outputFile>${project.build.outputDirectory}/my.properties</outputFile> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 

Và sau đó trong java:

java.io.InputStream is = this.getClass().getResourceAsStream("my.properties"); 
java.util.Properties p = new Properties(); 
p.load(is); 
String name = p.getProperty("name"); 
String version = p.getProperty("version"); 
String foo = p.getProperty("foo"); 
+0

Điều đó làm việc, nhưng làm cho Eclipse rơi vào ** vòng lặp build/deploy-to-Tomcat vô hạn ** (build -> tạo my.properties -> resource changed -> build), vì vậy tôi phải thay đổi phase thành 'compile'. Không chắc chắn nếu nó là giải pháp thích hợp mặc dù. –

+0

@atoregozh đề xuất sử dụng Tài nguyên của ổi thay vì tải tệp thuộc tính. ĐƯỢC. Nhưng hoàn nguyên thay đổi để giữ cho ví dụ này tối thiểu với API chuẩn. –

Các vấn đề liên quan