2014-07-04 14 views
5

Khi tôi chạy "phụ thuộc mvn: cây" cho dự án của tôi nó thể hiện như sau:Maven mang "test" sự phụ thuộc bắc cầu như "biên dịch"

[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ xxxxx --- 
[INFO] com.xxx.xxx:xxxxx:war:3.1.0-SNAPSHOT 
... 
[INFO] +- commons-configuration:commons-configuration:jar:1.5:compile 
[INFO] | \- commons-beanutils:commons-beanutils-core:jar:1.7.0:compile 
[INFO] +- org.seleniumhq.selenium:selenium-api:jar:2.34.0:test 
[INFO] | +- com.google.guava:guava:jar:14.0:test 
[INFO] | \- org.json:json:jar:20080701:test 
[INFO] +- org.seleniumhq.selenium:selenium-htmlunit-driver:jar:2.34.0:test 
[INFO] | +- org.seleniumhq.selenium:selenium-remote-driver:jar:2.34.0:test 
[INFO] | | +- cglib:cglib-nodep:jar:2.1_3:test 
[INFO] | | +- net.java.dev.jna:jna:jar:3.4.0:test 
[INFO] | | \- net.java.dev.jna:platform:jar:3.4.0:test 
[INFO] | \- net.sourceforge.htmlunit:htmlunit:jar:2.12:test 
[INFO] |  +- org.apache.commons:commons-lang3:jar:3.1:test 
[INFO] |  +- org.apache.httpcomponents:httpmime:jar:4.2.3:test 
[INFO] |  +- net.sourceforge.htmlunit:htmlunit-core-js:jar:2.12:test 
[INFO] |  +- xerces:xercesImpl:jar:2.10.0:test 
>>>[INFO] |  | \- xml-apis:xml-apis:jar:1.4.01:compile 
[INFO] |  +- net.sourceforge.nekohtml:nekohtml:jar:1.9.18:test 
[INFO] |  +- net.sourceforge.cssparser:cssparser:jar:0.9.9:test 
[INFO] |  | \- org.w3c.css:sac:jar:1.3:test 
[INFO] |  \- org.eclipse.jetty:jetty-websocket:jar:8.1.9.v20130131:test 
[INFO] +- org.seleniumhq.selenium:selenium-firefox-driver:jar:2.34.0:test 
... 

Như bạn thấy trên dòng rõ rệt, xml-apis có "biên dịch" phạm vi, và kết quả là nó được đóng gói vào tập tin .war. Tại sao nó có thể xảy ra?

Thêm thú vị nó chỉ xảy ra trong khi Java5 được sử dụng, ví Java6 phụ thuộc xuất hiện như "test".

Maven phiên bản: 3.0.4

+0

Liệu không 'xml-api' xuất hiện ở những nơi khác như dependance khác? –

+0

phụ thuộc kiểm tra sẽ không bao giờ được đóng gói vào chiến tranh ngoại trừ bạn đã làm điều gì đó kỳ lạ. Vui lòng hiển thị tệp pom của bạn. – khmarbaise

+0

@khmarbaise Tôi biết, nhưng vì lý do nào đó tôi có nó! Các tập tin pom là khá lớn, có một số poms mẹ ... Tôi đã không cố gắng để trích xuất mẫu mã tối thiểu, khá tẻ nhạt, nhưng hoàn toàn không có gì đặc biệt về phụ thuộc 'selenium-htmlunit-driver', tuyên bố như bình thường. – kan

Trả lời

3

Nếu bạn có một cái nhìn tại xercesImpl nó chứa một phụ thuộc vào xml-apis: xml-apis: jar: 1.4.01: biên dịch với phạm vi biên dịch để hiển thị phụ thuộc plugin là chính xác. Cách sử dụng -Dverbose sẽ thực hiện những việc như được ghi trong tài liệu:

Có bao gồm các nút bị bỏ qua trong cây phụ thuộc tuần tự hay không.

Ngoài việc phụ thuộc vào thử nghiệm ở trên như trong trường hợp của bạn không bao giờ được đóng gói thành tệp chiến tranh.

Phải có một nguồn khác của sự phụ thuộc tương tự gây ra bao bì vào cuộc chiến

Bên cạnh đó sự thay đổi trong hành vi trong mối quan hệ với việc thêm rõ ràng xml-apis để pom của bạn là một bằng chứng bổ sung cho việc này.

+0

Tôi không nghĩ rằng bạn đọc câu hỏi của tôi với sự chú ý đầy đủ. Nếu bạn xem xét bất kỳ phụ thuộc kiểm tra nào khác, ví dụ: htmlunit, nó có tất cả các phụ thuộc của nó như là biên dịch, nhưng chỉ xml-apis được hiển thị dưới dạng 'biên dịch'. '-Dverbose' chỉ nên bao gồm các nút bị bỏ qua (có, nó xảy ra), nhưng trong trường hợp của tôi nó cũng thay đổi phạm vi. Và '.jar' được đóng gói thành chiến tranh. Bất kỳ ý tưởng làm thế nào để tìm 'nguồn khác'? Kiến thức của tôi về Maven nói với tôi rằng không có nguồn nào khác. – kan

+0

Bạn phải bắt đầu tại hiện vật chiến tranh của bạn và xem qua phụ thuộc mvn: cây nơi tất cả các hiện vật đang đến. – khmarbaise

+0

Mảnh của sản lượng cây là trong câu hỏi của tôi. Nguồn duy nhất tôi thấy là 'selenium-htmlunit-driver'. Và nếu tôi '' the 'xml-apis' từ trình điều khiển, dấu hiệu biến mất khỏi cây. – kan

0

Tôi đã có một vấn đề tương tự.

Trong trường hợp của tôi một mục trong dependencyManagement của một pom mẹ thiết lập phạm vi của vật phẩm phụ thuộc để biên dịch. Trên thực tế tôi bỏ qua thẻ phạm vi có hiệu quả giống như thiết lập nó để biên dịch. Thay đổi nó thành được cung cấp đã giúp. Dường như phạm vi trong dependencyQuản lý được ưu tiên hơn phạm vi transitive. Điều này có ý nghĩa nhưng vẫn có thể gây nhầm lẫn khi tất cả những gì bạn muốn làm là xác định phiên bản.

Đó là thực sự không khó để phát hiện: Nhìn vào hiệu quả-pom cho thấy sự xâm nhập dependencyManagement.

3

Nghiên cứu đầu ra của lệnh Maven sau.

mvn -X dependency:tree -Dverbose 

Điều đó sẽ cho bạn biết tại sao Maven nâng cấp phạm vi từ thử nghiệm để biên dịch.

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