Trong dự án của tôi, có một lớp đang triển khai giao diện. Giao diện xuất phát từ sự phụ thuộc. Tôi có một sự phụ thuộc khác mà bản thân nó có một sự phụ thuộc vào một cái lọ cũng chứa cùng một giao diện, ngoại trừ một phiên bản với nhiều phương thức hơn; hai lọ chứa cùng một giao diện gói KHÔNG có cùng groupId hoặc artifactId.
Biên dịch không thành công vì trình biên dịch phàn nàn rằng lớp trong dự án của tôi không triển khai tất cả các phương thức. Tôi nhận ra đó là bởi vì trình biên dịch lấy tham chiếu giao diện từ bình sai. Câu hỏi của tôi là, tại sao maven sử dụng giao diện từ phụ thuộc transitive thay vì một từ jar mà tôi đề cập rõ ràng trong POM dự án? Tôi có thể thấy lọ được sử dụng xuất hiện sớm hơn trong định nghĩa (vì vậy tôi cũng tưởng tượng trong classpath), nhưng tôi nghĩ trong trường hợp này, maven đã giải quyết nó bằng cách sử dụng lớp/giao diện va chạm từ phụ thuộc với đường dẫn ngắn nhất Thứ tự phụ thuộc Maven
Đây là một phần của cây phụ thuộc. Lưu ý rằng đây là grepped nhưng nó vẫn có thể thấy rằng javax.servlet:servlet-api
(một trong những thực tế sử dụng) là sâu sắc hơn trong cây so với tomcat:servlet
(một trong đó nên được sử dụng)
[[email protected] proj]$ mvn dependency:tree | grep servlet
[INFO] | +- javax.servlet:servlet-api:jar:2.4:compile
[INFO] +- tomcat:servlet:jar:4.0.6:compile
Tôi đang sử dụng maven 3.0 .4
tomcat: servlet: jar phải được cung cấp, không biên dịch. Bạn nên biên dịch với javax.servlet: servlet-api và thêm một sự phụ thuộc vào phiên bản thích hợp. – OrangeDog