Tôi đang viết mã bằng scala và sử dụng SBT với plugin sbt-assembly. Dự án của tôi có rất nhiều thư viện bên ngoài, và do đó sbt-assembly mất một thời gian dài để đóng gói tệp JAR. Tôi muốn có một tệp jar riêng cho mã của tôi và cho các phụ thuộc. Vì vậy, tôi chỉ có thể biên dịch lại và chỉ repack mã của tôi. làm như thế nào?sbt-assembly: cách liên kết bình phụ thuộc với bình chính?
Progress cho đến nay:
Các lệnh sau đây trong build.sbt
ngăn SBT-lắp ráp từ đóng gói các thư viện:
assembleArtifact in packageScala := false
assembleArtifact in packageDependency := false
Sau đó lọ riêng biệt có thể được xây dựng bởi chuyển các lệnh sau: assembly
, assembly-package-scala
và assembly-package-dependency
. Họ làm cho ba lọ: một trong những có chứa chương trình của tôi, một với các thư viện scala và một với tất cả các phụ thuộc.
Tuy nhiên, tệp jar không thể thực thi được nữa vì nó không thấy các phụ thuộc trong tệp jar riêng biệt. Tôi nghĩ rằng tôi cần phải thêm một classpath để lắp ráp-sbt, nhưng tôi không chắc chắn làm thế nào để làm điều này. Xin vui lòng giúp đỡ (ý kiến chi tiết được đánh giá cao, như tôi mới để SBT). Cảm ơn!
Nó hoạt động! và nó nhanh: thời gian giảm từ khoảng 40 giây xuống còn vài giây. Ghi chú kỹ thuật: Tôi cũng cần thêm 'scala-library-2.10.2-assembly.jar' vì nếu không thì scala repl là không ổn định. Tôi có thể biên dịch nó với sbt 0.12.4 và sbt-assembly 0.9.0. – Karolis
Có cách nào để đóng gói tham chiếu lớp này vào tệp jar chính không? Vì vậy, nó sẽ có thể thực hiện jar bằng cách nhấp vào nó. – Karolis
[sbt-onejar] (https://github.com/sbt/sbt-onejar) có thể tạo ra một lọ chứa các lọ khác và nó đóng gói nhanh hơn. Nhưng tôi nghe sbt-lắp ráp bắt đầu lên nhanh hơn bởi vì có lẽ sbt-onejar'ed jar cần phải giải nén trên bay. sbt-assembly 0.9.0 lưu trữ thư mục lib unzips, do đó bạn không cần phải chia chúng ra. –