2012-03-14 37 views
5

Tôi có một hồ sơ maven và muốn thiết lập một tài sản đó là sau này có sẵn mỗi System.getProperty (..) trong java:đặt thuộc tính hệ thống java trong khi biên dịch maven 2?

<profile> 
    <id>local-dev</id> 
    <properties> 
    <my.comp.my.prop>myValue</my.comp.my.prop> 
    </properties> 
</profile> 

Tôi muốn System.getProperty("my.comp.my.prop")"myValue" nhưng nó null .. thế nào Tôi đặt nó đúng không? :)

Thansk!

+0

Bạn có thực sự có nghĩa là 'biên dịch'? Hoặc có lẽ các bài kiểm tra đơn vị? – bmargulies

+0

Ý của bạn là gì sau "có sẵn sau"? Bạn thiết lập thuộc tính hệ thống, ví dụ, bằng cách sử dụng '-Dmy.comp.mu.prop = foo' khi bạn thực thi ứng dụng. –

+0

Một nơi nào đó trong mã phía máy chủ của tôi, tôi muốn đọc thuộc tính để làm những việc khác nhau khi được biên dịch trong các tiểu sử biên dịch khác nhau. – Stuck

Trả lời

1

maven không thể đặt thuộc tính có thể được ứng dụng của bạn truy cập từ môi trường khi chạy.

Thay vào đó, bạn có thể sử dụng maven để cập nhật tệp thuộc tính trong codebase của bạn trong thời gian xây dựng, sau đó có thể được ứng dụng của bạn đọc khi chạy. Các giá trị khác nhau của thuộc tính có thể được đặt dựa trên cấu hình, do đó cho phép ứng dụng của bạn có các giá trị khác nhau như mong muốn.

Cách khác, bạn có thể gọi ứng dụng cài đặt thuộc tính mong muốn trong môi trường theo cách thủ công (bên ngoài maven).

+0

Cảm ơn! Có một thủ tục tiêu chuẩn làm thế nào để xây dựng và đọc một tập tin tài sản như vậy? – Stuck

+0

Chỉ dành cho độc giả hơn nữa, điều này được thực hiện bằng cách sử dụng khả năng lọc của Trình cắm Tài nguyên của Maven: http://maven.apache.org/plugins/maven-resources-plugin/examples/filter.html –

10

properties-maven-plugin plugin sẽ giúp bạn thực hiện chính xác những gì bạn đang tìm kiếm:

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>properties-maven-plugin</artifactId> 
    <version>1.0-alpha-2</version> 
    <executions> 
     <execution> 
      <goals> 
       <goal>set-system-properties</goal> 
      </goals> 
      <configuration> 
       <properties> 
        <property> 
         <name>my.property.name</name> 
         <value>my.property.value</value> 
        </property> 
       </properties> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 
+0

Điều này mang lại cho tôi: Thẻ không được công nhận: 'thực thi ' – Matt

+1

Nếu tôi hiểu nó một cách chính xác, điều này đặt thuộc tính cho vòng đời của maven, đặt chúng không có sẵn cho java khi chạy. Tôi đã thử nó sẽ không thành công. Tôi có đúng không? –

+0

@ yegor256 Nếu bạn vẫn còn ở đó SO: Tôi đoán những gì John B nói có ý nghĩa. Các thuộc tính ở đây là cho vòng đời của maven. Tôi đặt -1 cho câu trả lời của bạn mà tôi cảm thấy không chính xác trong ngữ cảnh của Q. Tôi sẽ upvote nó nếu bạn có thể làm rõ về ý kiến ​​của John. – dirai

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