2011-10-21 28 views
5

Tôi có một thư viện bên ngoài cần được liên kết động với một bài kiểm tra trong dự án java của tôi. Dự án được thiết lập sử dụng maven, và tôi cần phải thêm dòng sau vào đối số vm của tôi trong nhật thực cho kỳ thi này để vượt qua:Có thể liên tục vượt qua -Djava.library.path để thử nghiệm maven từ bên trong tệp POM không?

-Djava.library.path=${env_var:HOME}/.m2/repository/natives/dist/lib -ea

Đáng tiếc là điều này có nghĩa rằng chạy thử nghiệm từ maven sử dụng: mvn test sẽ luôn luôn thất bại .

Một việc xung quanh là để gọi mvn với một cuộc tranh luận -DargLine như vậy:

mvn test -DargLine="-Djava.library.path=/Users/rob/.m2/repository/natives/dist/lib -ea"

Tuy nhiên, rõ ràng này có vấn đề là cụ thể đối với máy tính của tôi, vì vậy tôi không thể đặt nó trực tiếp trong tệp pom. Tôi đoán những gì tôi đang tìm kiếm là một cách để sửa đổi chuỗi trên một cơ sở mỗi máy kinda như dòng đầu tiên không cho nhật thực.

Tôi cũng tò mò làm thế nào tôi có thể đặt nó vào file POM, tôi đã cố gắng đặt nó bên trong <argLine> thẻ, nhưng điều đó không có vẻ làm việc, có gì đó tôi đang mất tích:

<argLine>-Djava.library.path=/Users/rob/.m2/repository/natives/dist/lib -ea</argLine>

Trả lời

3

Sau một số nghiên cứu, tôi đã khám phá ra một giải pháp tốt cho vấn đề của mình.

Trong maven tập tin settings.xml của bạn, bạn có thể xác định vị trí cho localRepository đây là giá trị mặc định nếu bạn thiết lập không có gì:

  • Unix/Mac OS X - ~/.m2
  • Windows - C: \ Documents and Settings \ username.m2

Như bạn có thể thấy điều này phù hợp với ít nhất là phần đầu tiên của thư mục tôi đã cố gắng để thiết lập: /Users/rob/.m2

Vì liên kết động là hệ điều hành cụ thể, bạn cũng có thể muốn thiết lập cấu hình cho các hậu tố đường dẫn thay thế. Bạn có thể làm điều này trong một .pom như thế này:

<profile> 
    <id>OSX</id> 
     <activation> 
      <os> 
       <family>mac</family> 
      </os> 
     </activation> 
    <properties> 
     <dynamic.libLoc>${settings.localRepository}/natives/dist/lib</dynamic.libLoc> 
    </properties> 
</profile> 

Sau đó bạn có thể sử dụng tài sản trong .pom này cho dự án mà bạn muốn kiểm tra. Trong danh mục bổ sung, bạn có thể thêm:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <configuration> 
     <argLine>-Djava.library.path=${dynamic.libLoc}</argLine> 
    </configuration> 
</plugin> 

Bây giờ, maven có thể chạy các kiểm tra đó mà không cần phải chỉ định vị trí của thư viện được liên kết động. Bạn cũng có thể xử lý người dùng với các hệ điều hành khác nhau bằng cách chỉ cần thêm cấu hình khác.

Lưu ý: Liên quan đến vấn đề của tôi với <argLine> trước đó. Tôi nghĩ rằng tôi chỉ đang sử dụng sai số .pom

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