Tôi có một dự án Maven nhiều mô-đun. Vì lợi ích của ví dụ này, hãy xem xét hai mô-đun:
data
consumer
Mô-đun consumer
có mô-đun data
như một phụ thuộc.
Mô-đun data
khai báo một loạt các lớp lõi. Có những bài kiểm tra src/test
sử dụng chúng. Các bài kiểm tra này yêu cầu một số tạo đối tượng dài dòng, vì vậy tôi có một lớp với một số phương thức tiện ích trong đó để tạo các đối tượng này. Lớp tiện ích ( SampleDataHelper
) này nằm trong src/test
hệ thống phân cấp.
Tôi cũng có một số bài kiểm tra trong consumer
mô-đun cần tạo một số đối tượng dài dòng này. Tôi muốn sử dụng SampleDataHelper
lớp của mình (được định nghĩa trong data src/test
) trong các bài kiểm tra nằm trong consumer src/test
cây của tôi . Thật không may, mặc dù data
là một phụ thuộc của consumer
, consumer
không thể thấy các lớp tồn tại bên dưới data src/test
.
Để chống lại điều này, tôi nghĩ mình có thể tạo một mô-đun khác ( data-test
) và chuyển SampleDataHelper
đến nó bên dưới src/main
. Sau đó, tôi sẽ bao gồm data-test
như một phụ thuộc phạm vi thử nghiệm của data
. Thật không may, điều này giới thiệu một phụ thuộc vòng tròn: data
sử dụng data-test
, nhưng data-test
cũng yêu cầu data
.
Giải pháp duy nhất tôi đã đi lên với là nơi SampleDataHelper
dưới data src/main
dưới một test
gói và hy vọng rằng không có mã số ứng dụng thực tế bao giờ gọi nó.
Làm cách nào tôi có thể chia sẻ SampleDataHelper
lớp học của mình giữa các học phần mà không cần đặt nó bên dưới src/main
?
data
) trước khi tôi thậm chí có thể biên dịch mô-đun thứ hai của mình ( consumer
).
mvn package
, nhưng nó sẽ hoạt động tốt trong xây dựng một bước duy nhất khi bạn sử dụng mvn install
hoặc mvn deploy
. Chỉ cần một ghi chú nhanh chóng. Trong một trong những dự án lớn của chúng tôi, chúng tôi có một phần mềm bao bọc bên ngoài TestBase
và nó nằm trong src/main
đó tôi cũng không cho là một ý tưởng hay.