Cách tốt nhất để khai báo sự phụ thuộc Maven là chỉ được sử dụng cho đường dẫn lớp thử nghiệm (nhưng không biên dịch thử nghiệm) là gì?Khai báo phụ thuộc Maven là thời gian chạy thử nghiệm chỉ
Cụ thể, tôi muốn slf4j-api
(mặt tiền ghi) là phụ thuộc phạm vi biên dịch điển hình, nhưng tôi muốn slf4j-simple
(việc triển khai thanh barebones phù hợp với kiểm tra đơn vị) chỉ trên đường dẫn lớp thử nghiệm (không cần thiết để biên dịch thử nghiệm)). Tôi đã làm điều này:
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<scope>test</scope>
</dependency>
Tuy nhiên, nhược điểm của việc này là dependency:analyze
báo cáo slf4j-simple
như không sử dụng, có lẽ vì nó không cần thiết cho biên soạn:
[WARNING] Unused declared dependencies found:
[WARNING] org.slf4j:slf4j-simple:jar:1.7.7:test
tôi có thể không sử dụng một runtime
phụ thuộc vì tôi không muốn sự phụ thuộc quá thừa kế đó (ví dụ như các phụ thuộc hạ lưu có thể sử dụng log4j, vv thay thế). Tôi đã thử runtime
với optional=true
, nhưng điều đó dẫn đến cùng cảnh báo.
(Lưu ý rằng tôi cũng có thể thiết ignoreNonCompile
cho các plugin phụ thuộc, nhưng điều đó dường như là một công cụ rất cùn rằng sẽ che giấu các vấn đề tiềm năng khác.)
yêu cầu này là gì khi chạy cho nguồn chính? nó sẽ không phàn nàn về sự phụ thuộc vào phạm vi 'runtime'? –
Nói chung phụ thuộc transitive không cần phải được khai báo. Đối với một phụ thuộc tùy chọn (thường như đăng nhập có thể sử dụng các khung công tác khác nhau), quy trình của bạn là đúng. Có lẽ bạn cũng có thể thêm thử nghiệm phạm vi. –
Nó cũng khiếu nại (sai, IMHO) cho một phụ thuộc 'thời gian chạy', vì vậy nó có vẻ như phạm vi một mình không phải là câu trả lời ở đây. Những gì tôi thực sự muốn là một phạm vi đó là giao điểm của 'test' và' runtime' (theo như đường dẫn lớp) và cho plugin phụ thuộc để ít hoạt động hơn về các phụ thuộc "runtime" không được sử dụng. –