SBT Kiểm tra phụ thuộc trong nhiều dự án: Cung cấp mã kiểm tra cho các dự án phụ thuộc


83

Tôi có một SBT nhiều dự án trong đó một số dự án có sự phụ thuộc vào nhau. Như thế này:

 lazy val coreProject: Project = Project(
    id = "core-project",
    base = file("./core-project"),
    // other stuff
    ))

  lazy val extensions: Project = Project(
    id = "extensions",
    base = file("./extensions"),
    dependencies = Seq(coreProject)
  )

Bây giờ tôi có một số mã thử nghiệm trong dự án 'lõi' trong thư mục thử nghiệm. Ngoài ra còn có những thứ như mocks và test-tiện ích. Bây giờ tôi muốn sử dụng các tiện ích thử nghiệm đó trong các thử nghiệm của các phần mở rộng. Đối với mã sản xuất, điều này hoạt động, vì tôi đã khai báo một phần phụ thuộc. Tuy nhiên, có vẻ như sự phụ thuộc không có tác dụng đối với các bài kiểm tra. Khi tôi chạy các bài kiểm tra, tôi gặp lỗi biên dịch cho các lớp bị thiếu. Các lớp đó là từ mã thử nghiệm trong dự án lõi.

Làm cách nào để tôi có thể nói với sbt rằng phần phụ thuộc cũng nên bao gồm mã thử nghiệm cho phạm vi thử nghiệm? Để tôi có thể sử dụng lại đoạn mã của mình trong mã thử nghiệm của dự án 'exension'?

Câu trả lời:


91

Như vậy:

dependencies = Seq(coreProject % "compile->compile;test->test")

Điều này được thảo luận trong phần "Phụ thuộc đường dẫn classpath mỗi cấu hình" trong hướng dẫn Bắt đầu-Đa dự án .


1
Để những người khác không bị nhầm lẫn ở đây, điều này gợi ý rằng bạn nên đặt các phụ thuộc trong định nghĩa Dự án (không phải phụ thuộc thư viện).
Ryan Gross

Đối với các ninja không phải SBT, bạn có thể hiển thị thêm tệp bản dựng được không? Một định nghĩa như lazy val foo = project.settings(...).dependencies(Seq(bar % "compile->compile;test->test"))không hoạt động. @RyanGross, bạn có muốn không?
Abhijit Sarkar

45

Bạn cũng có thể làm điều này với .dependsOn(coreProject % "compile->compile;test->test")sau khi khai báo dự án ban đầu.

lazy val coreProject = Project("core-project")
lazy val extensions = Project("extensions").dependsOn(coreProject % "compile->compile;test->test")

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.