2015-03-13 18 views
7

Tôi có dự án thu thập các phụ thuộc cho trình cài đặt (sbt-install4j) sử dụng dependencyClasspath. Nó hoạt động hầu hết thời gian, trừ khi tôi có một sự phụ thuộc cụ thể:Thiếu phụ thuộc từ đường dẫn lớp

libraryDependencies += "org.bytedeco" % "javacpp" % "0.10" 

"javacpp" sẽ không được bổ sung vào dependencyClasspath. Bạn có thể tạo một dự án SBT đơn giản với chỉ phụ thuộc mà trên và cố gắng show dependencyClasspath, nó sẽ in:

[info] List(Attributed(C:\Users\me\.sbt\boot\scala-2.10.4\lib\scala-library.jar)) 

không có "javacpp". Bất kỳ manh mối nào có thể xảy ra? Đây có phải là lỗi SBT không?

+1

Nó có làm điều đó ngay cả với 'classpathTypes + =" maven-plugin "'? –

+0

Có. thêm 'classpathTypes + =" maven-plugin "' thêm phụ thuộc vào classpath. Cảm ơn bạn đã chỉ ra điều này. Nó được một chút tẻ nhạt trong các dự án đa mô-đun. Ví dụ, module 'B' phụ thuộc vào' A' và 'A' phụ thuộc vào javacpp. 'A' có' classpathTypes ... ', module' B' sẽ phải thêm 'classpathTypes ...' nữa. Vấn đề ban đầu của tôi là với dự án đa mô-đun. Sửa chữa của bạn hoạt động ở đó, chỉ cần được thêm vào mô-đun trên cùng. – Jarek

+0

Tôi tự hỏi tại sao chúng ta cần phải nói với SBT để tải Maven plugins một cách rõ ràng? Chúng tôi cũng có thể làm việc xung quanh đó bằng cách tách các tạo phẩm thành hai, với một plugin Maven giống như 10KB, nhưng tôi cảm thấy điều đó sẽ gây nhầm lẫn ... –

Trả lời

2

sbt không bao gồm các loại bao bì nhất định từ đường dẫn lớp mà nó tạo ra, bởi vì không phải tất cả các loại bao bì đều có ý nghĩa tùy thuộc vào. Thật không may, nó dường như làm điều này loại trừ âm thầm - và giá trị mặc định của classpathTypes không phải là luôn luôn những gì bạn muốn.

Loại bao bì của phụ thuộc có thể được tìm thấy trong phụ thuộc pom.xml hoặc ivy.xml (nếu có). Có hai trường hợp chính:

  1. Nếu loại bao bì thực sự là pom, điều này có thể có nghĩa đó là một pom phụ huynh và bạn đang cố gắng để phụ thuộc vào điều sai - tìm kiếm các mô-đun Maven cụ thể mà bạn thực sự muốn!
  2. Nếu mặt khác, nó maven-plugin - như trong trường hợp đặc biệt này - bạn cần phải thêm các loại bao bì để classpathTypes, sử dụng: classpathTypes += "maven-plugin"

Các trường hợp khác có lẽ sẽ tương tự như một trong những trên hai trường hợp.

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