sbt-assembly:如何将依赖罐与主罐连接起来?

Kar*_*lis 12 scala sbt sbt-assembly

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

迄今取得的进展:

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

assembleArtifact in packageScala := false

assembleArtifact in packageDependency := false

然后分离罐可以通过将下面的命令来构建:assembly,assembly-package-scalaassembly-package-dependency.他们制作了三个罐子:一个包含我的程序,一个包含scala库,另一个包含所有依赖项.

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

Eug*_*ota 6

请参阅设置类路径仍然无法找到外部Jar.甲骨文说:

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

所以,你必须说:

java -cp "foo-assembly-0.1-deps.jar:foo-assembly-0.1.jar" Main
Run Code Online (Sandbox Code Playgroud)

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

目前似乎有一个错误assembly-package-scala,它出来是空的,但它应该没关系,因为assembly-package-dependency包含Scala库也是如此.


apa*_*tel 4

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