2011-11-19 26 views
54

Tôi đã là một dự án đa SBT, nơi một số dự án có sự phụ thuộc với nhau. Như thế này:Kiểm tra SBT-phụ thuộc vào Multiprojects: Làm cho mã kiểm tra có sẵn cho các dự án phụ thuộc

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 'cốt lõi' trong thư mục thử nghiệm. Ngoài ra còn có những thứ như mocks và các tiện ích kiểm tra. Bây giờ tôi muốn sử dụng các tiện ích kiểm tra đó trong các thử nghiệm của các phần mở rộng. Đối với mã sản xuất, nó hoạt động, vì tôi đã khai báo một sự phụ thuộc. Tuy nhiên có vẻ như sự phụ thuộc không giữ cho các bài kiểm tra. Khi tôi chạy các bài kiểm tra tôi nhận được 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 sbt rằng phụ thuộc cũng nên bao gồm mã kiểm tra cho phạm vi kiểm tra? Vì vậy mà tôi có thể tái sử dụng mocks của tôi trong mã thử nghiệm của dự án 'exension'?

Trả lời

64

Giống như vậy:

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

này được thảo luận trong phần "Cho mỗi cấu hình classpath phụ thuộc" vào sau đó Getting-Started-Multi-Project dẫn.

+0

Ah vâng, cảm ơn. Đã nhìn thấy bit đó. – Gamlor

+0

Chỉ cần những người khác không nhầm lẫn ở đây, điều này cho thấy rằng bạn đặt các phụ thuộc trong định nghĩa dự án (không phải là phụ thuộc thư viện). –

18

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

lazy val coreProject = Project("core-project") 
lazy val extensions = Project("extensions").dependsOn(coreProject % "compile->compile;test->test") 
Các vấn đề liên quan