2017-11-06 36 views
6

tôi có một dự án maven đa mô-đun với ba mô-đun core, utilstest-utilsJava9 Multi-đun Maven Dự án thử nghiệm Dependencies

Core có sự phụ thuộc sau đây định nghĩa

<dependency> 
    <groupId>my.project</groupId> 
    <artifactId>utils</artifactId> 
</dependency> 
<dependency> 
    <groupId>my.project</groupId> 
    <artifactId>test-utils</artifactId> 
    <scope>test</scope> 
</dependency> 

Tôi đã thêm Java 9 module-info.java các định nghĩa cho cả ba mô-đun và core giống như sau:

module my.project.core { 
    requires my.project.utils; 
} 

Tuy nhiên tôi không thể tìm ra cách để có được các lớp kiểm tra của core để có thể xem các lớp học test-utils trong quá trình thực hiện kiểm tra. Khi maven-surefire-plugin chạy thử nghiệm, tôi không tìm thấy lớp học.

Nếu tôi thêm một requires my.project.testutils;-core 's module-info.java:

module my.project.core { 
    requires my.project.utils; 
    requires my.project.testutils; //test dependency 
} 

Sau đó, tại thời gian biên dịch tôi nhận được một lỗi mà các module my.project.testutils không thể được tìm thấy (có lẽ vì nó chỉ đưa vào như một sự phụ thuộc kiểm tra).

Làm cách nào để làm việc với các phụ thuộc thử nghiệm trong thế giới mô-đun Java 9? Vì lý do rõ ràng của tôi không muốn mã chính của tôi để kéo phụ thuộc kiểm tra. Tui bỏ lỡ điều gì vậy?

+3

Tôi không phải là Maven Maven và chưa sử dụng plugin Surefire, nhưng 'module-info.java' với hai' require' chắc chắn là hướng sai. Nói chung, trong Java 9, các bài kiểm tra được tạo điều kiện bằng cách 'vá' một mô-đun (Maven và Gradle có xu hướng trừu tượng hóa nó đi). Trên một lưu ý khác, nó không rõ ràng nếu bạn đã thấy tài liệu này lại: toolchains? - http://maven.apache.org/surefire/maven-surefire-plugin/java9.html –

+1

Điều này không sử dụng plugin Surefire, cũng không phải phạm vi 'test' (vì vậy tôi sẽ không viết nó làm câu trả lời), nhưng trong trường hợp điều này giúp, đây là một ví dụ Java9 nhỏ sử dụng Maven - https://github.com/codetojoy/WarO_Java_9_Maven –

+0

@MichaelEaster Phần trên mô-đun vá là chính xác ở đó, nhưng phần toolchain dường như không liên quan đến câu hỏi. – nullpointer

Trả lời

4

Với maven và java9, nếu my.project.testutils của bạn là phụ thuộc phạm vi kiểm tra, bạn không cần bao gồm rõ ràng (requires) trong mô tả mô-đun.


Phụ thuộc kiểm tra được thực hiện thông qua chính đường dẫn lớp. Vì vậy, bạn có thể chỉ cần loại bỏ các testutils và nó sẽ được vá bởi maven trong khi thực hiện các bài kiểm tra.

module my.project.core { 
    requires my.project.utils; 
} 

Tham khảo slide 30 pertaining to maven-compiler-plugin.

enter image description here

tôi cũng sẽ đề nghị bạn hãy xem Where should I put unit tests when migrating a Java 8 project to Jigsawthis comment bởi Robert xác nhận về việc thực hiện mà maven sau.

Sửa: Tạo một sample project vẽ một tương tự mà các module chính là tương tự như của bạn core, sự phụ thuộc vào guava là giống như utils của bạn và junit phụ thuộc là giống như testutils của bạn.

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