2009-05-05 38 views
38

Chúng tôi sử dụng dòng lệnh để truyền các thuộc tính hệ thống cho máy ảo Java khi chạy Hudson xây dựng trên một hộp Linux. Nó được sử dụng để hoạt động khá tốt trong phiên bản 2.0.9 bởi vì chúng tôi đã nâng cấp lên 2.1.0 nó có ngừng hoạt động hoàn toàn. Các thuộc tính hệ thống không bao giờ làm cho nó tới máy ảo Java.Maven 2.1.0 không chuyển các thuộc tính hệ thống sang máy ảo Java

Tôi đã tạo một dự án thử nghiệm nhỏ và thực sự nó không hoạt động chút nào.

này nên chỉ làm việc tốt với Maven 2.0.9:

mvn2.0.9 -Dsystem.test.property=test test 

Nhưng điều này sẽ thất bại:

mvn2.1 -Dsystem.test.property=test test 

Mã Java đơn giản là thực hiện điều này

assertTrue(System.getProperty("system.test.property") != null); 

Trả lời

52

I don' t nghĩ rằng đây là sự cố trong plugin Maven hoặc Surefire. Người khác chắc chắn là hành vi khác nhau. Có vẻ như bây giờ, khi Surefire forks các JVM, sẽ không mất tất cả các thuộc tính hệ thống từ JVM mẹ.

Đó là lý do tại sao bạn nên chuyển bất kỳ thuộc tính hệ thống nào bạn muốn cho các thử nghiệm, sử dụng argLine. Vì vậy, cả hai nên làm việc

mvn2.1 -Dsystem.test.property=test test -DforkMode=never 

hoặc

mvn2.1 test -DargLine="-Dsystem.test.property=test" 
+0

"argLine" chỉ là những gì tôi đang tìm kiếm! Cảm ơn nhiều! – armandino

+0

đáng ngạc nhiên cho Locale.getDefault() những làm việc mvn kiểm tra -DargLine = "- Duser.language = de -Duser.region = DE" và không phải là mvn kiểm tra -DargLine = "- Dsystem.user.language = de - Dsystem.user.region = DE " – bibstha

+3

Xin lưu ý rằng, vor maven 3 bạn chỉ cần sử dụng' mvn -Dsystem.test.property = test test'. Maven tuyên truyền thuộc tính cho các bài kiểm tra. – BetaRide

12

Tôi đã có kinh nghiệm này với Surefire plug-in. Trình cắm Surefire được chạy trong một cá thể JVM khác được khởi chạy bởi Maven. Các tham số dòng lệnh có thể cấu hình theo cấu hình plugin của plugin chắc chắn trong tệp pom.xml của bạn. Đây là một mẫu của cấu hình của chúng tôi.

 <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-surefire-plugin</artifactId> 
      <version>2.4.3</version> 
      <!-- 
        By default, the Surefire Plugin will automatically include all test classes with the following wildcard patterns: 
        "**/Test*.java" - includes all of its subdirectory and all java filenames that start with "Test". "**/*Test.java" - 
        includes all of its subdirectory and all java filenames that end with "Test". "**/*TestCase.java" - includes all of 
        its subdirectory and all java filenames that end with "TestCase". 
       --> 
      <configuration> 
       <includes> 
        <include>**/*Test.java</include> 
       </includes> 
       <systemProperties> 
        <property> 
         <name>app.env</name> 
         <value>dev</value> 
        </property> 
        <property> 
         <name>oracle.net.tns_admin</name> 
         <value>${oracle.net.tns_admin}</value> 
        </property> 
       </systemProperties> 
      </configuration> 
     </plugin> 
+4

Ngày nay, sử dụng thay vì . Xem http://maven.apache.org/plugins/maven-surefire-plugin/examples/system-properties.html –

+0

Tôi đã thử điều này và $ {...} dường như không được thay thế bằng thuộc tính giá trị được chuyển đến maven ... – thecoop

+0

@thecoop - không chắc chắn vấn đề là gì, có thể là lỗi chính tả ở đâu đó, nhưng điều này làm việc khá tốt cho tôi. –

2

Hãy cẩn thận để không trộn lẫn tệp cấu hình với đối số dòng lệnh. Tệp cấu hình (pom.xml) ghi đè tất cả các đối số cmd. Vì vậy, không cấu hình plugin chắc chắn trong pom.xml nếu bạn muốn vượt qua nó thông qua dòng lệnh như raisercostin giải thích.

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