我是一個沉重的Maven用戶,現在我正在逐步使用SBT來處理我的一些項目。使用SBT創建獨立的罐子
我想知道如何使用SBT創建獨立的Java項目?這個項目應該打包成一個JAR文件,這個JAR文件將被用作另一個SBT項目的依賴項。
在Maven中,我可以告訴我的pom.xml
當我構建它時應該產生什麼類型的工件。 SBT中可以做些類似的事情嗎?
我是一個沉重的Maven用戶,現在我正在逐步使用SBT來處理我的一些項目。使用SBT創建獨立的罐子
我想知道如何使用SBT創建獨立的Java項目?這個項目應該打包成一個JAR文件,這個JAR文件將被用作另一個SBT項目的依賴項。
在Maven中,我可以告訴我的pom.xml
當我構建它時應該產生什麼類型的工件。 SBT中可以做些類似的事情嗎?
有獨立,使一個項目可用作一個依賴或其他項目之間的差異。在第一種情況下,您可以使用插件,如sbt-assembly。它會做什麼是創建一個包含項目類文件及其所有依賴關係的jar文件。如果你編寫一個應用程序,你會得到一個可以從任何地方執行的雙擊jar文件。
如果您想將項目A用作另一個項目B的依賴項,則您有不同的選項。您可以使用sbt package
(@Channing Walton的答案)打包A的類文件。然後,您可以將生成的.jar
文件放在項目B的lib
目錄中。但是,如果A也需要庫,則必須確保它們也最終放入項目B的庫中。
更好的方法是發佈您的項目。您可以使用sbt publish-local
純粹在本地計算機上執行此操作。這會將由package
生成的jar文件存儲在一個特殊的本地目錄中,該目錄可以從另一個項目的sbt中訪問,以及包含A的依賴關係的POM文件。它將使用組ID(組織)和工件ID (名)和一個版本的項目A.。例如,在build.sbt
:
name := "projecta"
version := "0.1.0-SNAPSHOT"
organization := "com.github.myname"
scalaVersion := "2.10.3"
publishMavenStyle := true
與sbt publish-local
發佈後,您可以添加以下的依賴到項目B:
libraryDependencies += "com.github.myname" %% "projecta" % "0.1.0-SNAPSHOT"
如果你有一個純Java項目,您可以省略Scala版本後綴,即在項目A中:
crossPaths := false
autoScalaLibrary := false
然後在項目B:
libraryDependencies += "com.github.myname" % "projecta" % "0.1.0-SNAPSHOT"
(只使用一個%
組和工件之間ID字符)。
更多有關發佈在sbt documentation。
'sbt package'會產生一個jar文件。
如果你希望它是可執行的,你需要以下內容添加到您的名.bst配置:
mainClass in Compile := Some("your.main.Class")
JAR文件在哪裏結束? –
其寫入目標/ scala-2.xx/ –
任何想法如何使用它創建一個可執行的jar文件?上次我檢查由package命令創建的jar文件是不可執行的。 –
publishLocal
構建工件並在本地Ivy存儲庫中發佈,使其可用於本地項目依賴項。
publishM2
與上面相同,但是該工件在本地Maven回購站中發佈,而不是常春藤回購。
我認爲最簡單的方法來生產一個獨立的罐子,其中的項目, 可悲的是不躺在sbt內。
我個人使用我的IDE:Intellij來製作jar(通過'build artifact'功能)。
感謝Intellij,我可以很容易地選擇我想在jar中包含哪個庫(例如scala stl)。
恕我直言,這是迄今爲止最簡單的方法來獲得您的項目的可執行jar。
如果你放置scala stl,你可以使用「java -jar」命令運行你的jar,如果你不需要在scala中安裝正確版本的scala來運行它。
然而,這是一個選項,大多數重要的項目都是通過像TeamCity這樣的持續集成工具來構建它們的工件,爲此您需要像SBT這樣的工具。 –
同意。我的用例是一個小工具,我想在不安裝scala的情況下部署在遠程機器上。 – gwenzek
當然,你可以使用'sbt package'命令,它會創建一個jar文件,但是這個jar沒有任何依賴關係。運行它需要爲庫指定'classpath'arg。
在你的情況下,你希望一個獨立的可運行文件。你需要添加依賴關係。 要做到這一點,你可以使用SBT「裝配」插件,請參考https://github.com/sbt/sbt-assembly/
之後,你可以運行「SBT集」命令,它提供了所有的依賴脂肪的jar文件,您可以部署和任何地方和任何運行時間。
有關詳情請參閱本article
文章鏈接已經死機。 – Thilo
看看SBT-onejar:https://github.com/sbt/sbt-onejar。另請參見[聚合和類路徑依賴項](http://www.scala-sbt.org/release/docs/Getting-Started/Multi-Project.html) – FoggyDay
如何使用sbt-onejar創建新的sbt項目?例如,在Maven中,有一個命令行可以爲我生成項目結構。關於如何用sbt和sbt-onejar做到這一點的任何想法? – sparkr
如果你有很多的依賴關係,你也可以使用https://github.com/sbt/sbt-assembly 在做一些指令之後調用'sbt assembly'就像我一樣。 – DaunnC