Tôi mới sử dụng sbt. Tôi muốn nó để đặt tất cả các phụ thuộc jar bay cũng như tập tin jar của tôi vào một nơi. SBT sẽ chạy ứng dụng, nhưng tôi đã có nhiều phụ thuộc khác nhau nằm rải rác xung quanh và một thư mục .ivy chứa đầy những thứ mà tệp jar của tôi phụ thuộc gián tiếp. Vì vậy, có một lệnh đơn giản để sao chép tất cả vào một nơi duy nhất để tôi có thể phân phối nó cho một máy khác?làm cách nào để nhận được sbt thu thập tất cả các tệp jar mà mã của tôi phụ thuộc vào một địa điểm?
làm cách nào để nhận được sbt thu thập tất cả các tệp jar mà mã của tôi phụ thuộc vào một địa điểm?
Trả lời
Có rất nhiều plugin bạn có thể sử dụng: sbt-assembly, sbt-proguard, sbt-onejar, xitrum-package, vv
Xem list of SBT plugins.
Sự khác nhau là gì? – lony
Tạo một nhiệm vụ trong xây dựng tập tin của bạn như thế này:
lazy val copyDependencies = TaskKey[Unit]("pack")
def copyDepTask = copyDependencies <<= (update, crossTarget, scalaVersion) map {
(updateReport, out, scalaVer) =>
updateReport.allFiles foreach {
srcPath =>
val destPath = out/"lib"/srcPath.getName
IO.copyFile(srcPath, destPath, preserveLastModified = true)
}
}
Thêm Task để một dự án như thế này:
lazy val HubSensors =
Project("HubSensors", file("HubSensors"), settings = shared ++ Seq(
copyDepTask,
resolvers ++= Seq(novusRels),
libraryDependencies ++= Seq(
jodatime
)
)) dependsOn(HubCameraVision, JamServiceProxy, HubDAL)
Trong giao diện điều khiển loại SBT:
project [Project Name]
pack
Tôi thấy hai khó khăn trong cách tiếp cận này, đặc biệt với các dự án lớn: 1. Chạy _update_ trên nhiều dự án với phụ thuộc lẫn nhau sẽ sao chép cùng một .jar nhiều lần; 2. Bạn có thể có cùng sự phụ thuộc nhưng với các phiên bản riêng biệt được sao chép. Điều này xảy ra nói chung với các thư viện phổ biến, như log4j và apache-commons, bởi vì cùng một tạo phẩm được tham chiếu quá mức bởi nhiều phụ thuộc. Xem tác vụ 'đã bị đuổi' để biết thêm thông tin. Bạn có thể làm điều gì đó như (mã giả) "allFiles - bị đuổi ra khỏi", nhưng nó không quan trọng. Bạn sẽ phải đi sâu vào API SBT. –
Nhưng, đối với các dự án nhỏ, cách tiếp cận của bạn sẽ hoàn toàn ổn. –
Các tài liệu SBT có một list of "One Jar Plugins":
- SBT-lắp ráp: https://github.com/sbt/sbt-assembly
- xsbt-Proguard-plugin: https://github.com/adamw/xsbt-proguard-plugin
- SBT-triển khai: https://github.com/reaktor/sbt-deploy
- SBT-appbundle (os x độc lập): https://github.com/sbt/sbt-appbundle
- sbt-onejar (Gói dự án của bạn bằng One-JAR ™): https://github.com/sbt/sbt-onejar
Thử plugin sbt-pack https://github.com/xerial/sbt-pack, thu thập tất cả các lọ phụ thuộc vào thư mục đích/gói và cũng tạo tập lệnh khởi chạy.
Tôi vừa chuyển từ sbt-onejar sang sbt-pack và tôi phải nói nó rất hay: nhanh, dễ sử dụng và đáng tin cậy. –
Bạn cũng có thể thử SBT Native Packager: https://github.com/sbt/sbt-native-packager (SBT 0.7+)
này vẫn là một WIP nhưng sẽ được sử dụng trong Google Play Khung 2.2 trong vài tuần tới. Với điều này, bạn có thể tạo các tệp ZIP độc lập, gói Debian (DEB), các gói cài đặt Windows (MSI), DMG, RPM, v.v.
Để giúp thêm một chút, với sbt-native-packager được cài đặt, người ta sẽ thực hiện 'sbt stage' để lấy các tệp trong' target/universal/stage' – akauppi
bạn có thể tìm kiếm Plugin SBT này: https://github.com/anvie/sbt-onedir-plugin
Thêm dòng sau vào tập tin build.sbt
của bạn.
retrieveManaged := true
này sẽ tập hợp các phụ thuộc tại địa phương
Cảm ơn gợi ý. Làm thế nào bạn biết về điều này - là có một liên kết để sbt tài liệu 0.13.13 (tôi đã không tìm thấy). Nó hoạt động - 'sbt compile' tập hợp các phụ thuộc trong' lib_unmanaged/'. – akauppi
Được đề cập trong http://www.scala-sbt.org/0.13/docs/Faq.html#Where+has+0.7%E2%80%99s++gone%3F – akauppi
Cảm ơn rất nhiều, tôi thích cách tiếp cận này, don không muốn cấu hình cho plugin khác biệt. Tuy nhiên, nó trông giống như retrieveManaged sẽ không nhận được phụ thuộc vào thư viện java được quản lý bởi maven, nếu có giải pháp về điều đó? – carfield
- 1. MacOSX: Cách thu thập phụ thuộc vào gói địa phương?
- 2. Thu thập các phụ thuộc theo sbt 0.10 (đặt tất cả các lọ phụ thuộc vào mục tiêu/scala-version/lib /)
- 3. Grails: cách thu thập tất cả các tin nhắn
- 4. Maven có thể thu thập tất cả các JAR phụ thuộc cho một dự án để trợ giúp triển khai ứng dụng không?
- 5. Tìm hiểu phụ thuộc của tất cả các tệp DLL?
- 6. Có cách nào để có được tất cả các phụ thuộc của dự án thông qua sbt plugin?
- 7. Cách đơn giản để thêm URL jar làm phụ thuộc vào sbt
- 8. Thu thập phụ thuộc chuyển tiếp phụ thuộc của Maven vào đường dẫn lớp của dự án không phải Maven
- 9. Tìm tất cả các địa điểm mà một biến đã được đặt?
- 10. Làm thế nào để tìm ra các lọ mà các phụ thuộc trong pom.xml của maven phụ thuộc vào?
- 11. công thức bảng tính để thu thập tất cả các trận đấu vào một tế bào
- 12. Với Maven, làm thế nào tôi có thể xây dựng một phân phối có jar của dự án của tôi và tất cả các lọ phụ thuộc?
- 13. Xây dựng JAR bao gồm tất cả các phụ thuộc của nó
- 14. Làm cách nào để phụ thuộc vào các tác vụ khác và thực hiện mã của bạn trong SBT 0.10?
- 15. Có cách nào trong Spring để tự động thu thập tất cả các phụ thuộc của một loại đã cho không?
- 16. Nhận IntelliJ IDEA hiểu các phụ thuộc SBT
- 17. Làm cách nào để bao gồm các JAR bên ngoài trong Project JAR của riêng tôi
- 18. Làm cách nào để buộc `setup.py test` cài đặt các phụ thuộc vào` virtualenv` của tôi?
- 19. Cách viết tệp package.json để tất cả các phụ thuộc được tải xuống bằng "npm install"
- 20. tweepy/twitter nhận được tất cả các tweet từ một địa điểm:
- 21. 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
- 22. Tôi làm cách nào để lắp ráp một ứng dụng bảng điều khiển với Maven mà không giải nén tất cả các phụ thuộc?
- 23. Làm thế nào để liệt kê các phụ thuộc của một JAR
- 24. Chạy "sạch" tất cả các tiểu dự án SBT phụ thuộc
- 25. Cách thu thập và tiêm tất cả các hạt của một loại nhất định trong cấu hình Spring XML
- 26. Làm thế nào để xác định maven phụ thuộc kiểm tra-jar trong SBT
- 27. Làm thế nào để liệt kê tất cả các thuộc tính phụ thuộc của kiểm soát?
- 28. Tìm tất cả các địa điểm và địa điểm của chuỗi con
- 29. Cách nhận tất cả phụ huynh cho đến khi một phụ huynh nào đó đạt được
- 30. Thêm phụ thuộc vào dự án Scala (sbt)
Có, đây là nỗi đau thực sự. Có lẽ tôi đã bỏ lỡ điều gì đó nhưng tôi thực sự không hiểu tại sao đây không phải là một phần của _Simple_ Build Tool –
@AlexPovar: Tôi đoán có rất nhiều cách để thực hiện việc này và chọn tiêu chuẩn hóa nó có thể gây hại (nhưng thuận tiện tôi đồng ý) . –