(Câu hỏi dài phía trước. Đơn giản tl; dr ở dưới cùng).Sử dụng DependsOn giữa hai dự án SBT ScalaJS
Tôi có hai ScalaJS dự án xây dựng với SBT - "myapp" và "mylib", trong cấu trúc thư mục sau
root/build.sbt
root/myapp/build.sbt
root/myapp/jvm/
root/myapp/js/
root/myapp/shared/
root/mylib/build.sbt
root/mylib/jvm
root/mylib/js
root/mylib/shared
lib
xuất khẩu một artifact có tên là "com.example: mylib: 0.1", mà như được sử dụng làm thư việnDependency cho myapp
.
myapp và mylib nằm trong các kho lưu trữ riêng biệt, chứa tệp xây dựng của riêng chúng và có thể được tạo riêng hoàn toàn (nghĩa là chúng phải chứa cấu hình bản dựng riêng của chúng).
Trong quá trình sản xuất, chúng sẽ được xây dựng riêng biệt với mylib
được xuất bản lần đầu tiên dưới dạng tạo tác maven trước khi tạo riêng biệt myapp
.
Tuy nhiên, trong quá trình phát triển, tôi muốn có thể hợp nhất chúng thành dự án SBT mẹ để cả hai có thể được phát triển song song mà không cần sử dụng publishLocal
sau mỗi thay đổi.
Trong một truyền thống (không scalajs) dự án này sẽ là khá dễ dàng
$ROOT/build.sbt:
lazy val mylib = project
lazy val myapp = project.dependsOn(mylib)
Tuy nhiên trong ScalaJS, chúng tôi thực sự có hai dự án bên trong mỗi mô-đun - appJVM
, appJS
, libJVM
và libJS
. Như vậy, cấu hình trên chỉ tìm thấy dự án gốc tổng hợp và không áp dụng chính xác cấu hình dependsOn
cho các dự án JVM và JS thực tế.
(tức myapp và mylib build.sbt mỗi chứa hai dự án, và một dự án gốc tổng hợp)
Lý tưởng nhất là tôi muốn để có thể làm điều gì đó như sau
lazy val mylibJVM = project
lazy val myappJVM = project.dependsOn(mylibJVM)
lazy val mylibJS = project
lazy val myappJS = project.dependsOn(myappJS)
Thật không may này chỉ tạo các dự án mới trong thư mục gốc thay vì nhập các dự án con.
Tôi cũng đã cố gắng kết hợp khác nhau của con đường (như)
lazy val mylibJVM = project.in(file("mylib/jvm"))
Nhưng điều này không thấy cấu hình trong tập tin build.sbt trong mylib
Cuối cùng tôi tiếp tục chạy lên so với cùng vấn đề - khi nhập dự án SBT nhiều dự án hiện có vào tệp sbt cha mẹ, nó nhập dự án gốc, nhưng dường như không cung cấp cách nhập một dự án con từ tệp SBT đa nhiệm hiện có theo cách cho phép tôi thêm cấu hình dependsOn
cho nó.
tl; dr
Nếu tôi có
root/mylib/build.sbt
với nhiều dự án quy định vàroot/myapp/build.sbt
với nhiều dự án quy định
Có thể nhập tiểu dự án cá nhân vào root/build.sbt
thay của dự án gốc từ submodule?
tức là tôi có thể có hai lớp đa bản dựng.
Kiến thức và kiến thức sbt của tôi chính xác một năm và tôi không biết khi nào sự tách biệt giữa jvm và js được giới thiệu cho các dự án scalajs hoặc thậm chí nó có ý nghĩa gì với phiên bản plugin của tôi 0.6.4, tôi sẽ làm điều này: 1) Tạo một nhiệm vụ photocopy mà phụ thuộc vào fastOptJs nhiệm vụ lib và bản sao kết quả từ lib vào ứng dụng 2) thực hiện nhiệm vụ fastOptJs ứng dụng của phụ thuộc vào này Hãy cho tôi biết nếu điều này phần nào giúp trong trường hợp này tôi có thể cố gắng giúp đỡ nhiều hơn. – 0fnt