2012-03-08 34 views
6

Tôi cần thực hiện một số kiểm tra với maven và chuyển một tham số từ dòng lệnh.chuyển một tham số java từ maven

Mã java của tôi sẽ nhận tham số là: System.getenv ("my_parameter1");

và tôi xác định thông số trong tệp pom.xml làm ví dụ bên dưới: (và sau này, tôi sửa đổi tệp pom.xml để lấy thông số từ dòng chung mvn clean install -Dmy_parameter1 = value1)

nhưng không hoạt động; System.getenv ("my_parameter1") trả về null. Tôi nên xác định tham số trong tệp pom.xml như thế nào?

pom.xml

<project> 
    ... 
    <profiles> 
    <profile> 
     <properties> 
     <my_parameter1>value1</my_parameter1> 
     </properties> 
     <build> 
     <plugins> 
      <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-surefire-plugin</artifactId> 
      <executions> 
       <execution> 
       <id>slowTest</id> 
       <phase>test</phase> 
       <goals> 
        <goal>test</goal> 
       </goals> 
       <configuration> 
        <skip>false</skip> 
        <includes> 
        <include>**/*Test.java</include> 
        <include>**/*TestSlow.java</include> 
        </includes> 
        <properties> 
        <my_parameter1>value1</my_parameter1> 
        </properties> 
       </configuration> 
       </execution> 
      </executions> 
      </plugin> 
     </plugins> 
     </build> 
    </profile> 
    </profiles> 
</project> 

Trả lời

16

System.getenv() đọc biến môi trường, chẳng hạn như PATH. Những gì bạn muốn là đọc một thuộc tính hệ thống thay thế. -D [tên thuộc tính hệ thống] = [giá trị] là dành cho các thuộc tính hệ thống, chứ không phải các biến môi trường.

Bạn có hai lựa chọn:

  1. Nếu bạn muốn sử dụng biến môi trường, sử dụng phương pháp hệ điều hành cụ thể của thiết lập các biến môi trường my_parameter1 trước khi bạn khởi động Maven. Trong Windows, sử dụng set my_parameter1=<value>, trong 'nix sử dụng export my_parameter1=<value>.

  2. Bạn có thể sử dụng System.getProperty() để đọc giá trị thuộc tính hệ thống từ bên trong mã của mình.

dụ:

String param = System.getProperty("my_parameter1"); 

Trong bạn chắc chắn thành cấu hình plugin, bạn có thể sử dụng:

<configuration> 
    <systemPropertyVariables> 
     <my_property1>${my_property1}</my_property1> 
    </systemPropertyVariables> 
</configuration> 

nào lấy _my_property1_ tài sản Maven và đặt nó cũng trong các thử nghiệm của bạn.

Thêm chi tiết về điều này here.

Tôi không chắc liệu thuộc tính hệ thống từ Maven có được tự động chuyển sang kiểm tra hay không hoặc chế độ ngã ba có ảnh hưởng đến việc điều này xảy ra hay không.

+1

Chỉ cần kiểm tra: Thuộc tính hệ thống của Maven là * không * tự động được chuyển đến các thử nghiệm. – SiKing

2

Sử dụng

${env.my_parameter} 

để truy cập các biến môi trường trong pom.xml.

Bạn có thể sử dụng plugin giúp đỡ để xem những biến được thiết lập với

mvn help:system 

Tuy nhiên việc sử dụng các thuộc tính bình thường nên làm việc quá. Tuy nhiên, trong bối cảnh rộng lớn, tôi tự hỏi ... bạn muốn làm gì? Có thể có một giải pháp đơn giản hơn.

2

Plugin maven surefire cũng có một option to set environment variables, chỉ cần thêm cấu hình này vào plugin của bạn.

<environmentVariables> 
    <my_parameter1>value</my_parameter1> 
</environmentVariables> 

Tôi nghĩ điều này yêu cầu plugin hoạt động trong fork mode, là mặc định.

+0

+1 cho chế độ ngã ba ... Nó không được viết trong tài liệu. – JSlain

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