sbt-assembly:如何将依赖jar连接到主jar?

时间:2013-07-25 19:41:23

标签: scala sbt sbt-assembly

我在scala中编码并使用带有sbt-assembly插件的SBT。我的项目有很多外部库,因此sbt-assembly需要很长时间来打包JAR文件。我想为我的代码和依赖项提供单独的jar文件。因此,我可以简单地重新编译并重新打包我的代码。怎么做?

到目前为止

进展:

build.sbt中的以下命令阻止sbt-assembly打包库:

assembleArtifact in packageScala := false

assembleArtifact in packageDependency := false

然后可以通过传递以下命令来构建单独的jar:assemblyassembly-package-scalaassembly-package-dependency。他们制作了三个罐子:一个包含我的程序,一个包含scala库,另一个包含所有依赖项。

但是,jar文件不再可执行,因为它在单独的jar文件中看不到依赖项。我想我需要为assembly-sbt添加一个类路径,但我不知道该怎么做。请帮助(详细评论表示赞赏,因为我是SBT的新手)。谢谢!

2 个答案:

答案 0 :(得分:6)

Setting Classpath Still Can't Find External Jar。甲骨文说:

  

使用此选项时,JAR文件是所有用户类的源,并忽略其他用户类路径设置。

所以,你必须说:

java -cp "foo-assembly-0.1-deps.jar:foo-assembly-0.1.jar" Main

其中Main是主类的名称,:是操作系统上的文件分隔符(Windows上为;)。

目前assembly-package-scala中似乎存在一个错误,但它出现了空白,但它无关紧要,因为assembly-package-dependency也包含Scala库。

答案 1 :(得分:4)

https://github.com/xerial/sbt-pack使用sbt-pack插件。到目前为止,我发现它是打包项目和依赖项的最简洁方法。