12

我在 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 添加一个类路径,但我不知道该怎么做。

4

2 回答 2

6

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

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

所以,你不得不说:

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

whereMain是主类的名称,并且:是您的操作系统上的文件分隔符(;在 Windows 上)。

目前似乎有一个错误assembly-package-scala并且它是空的,但这不重要,因为它也assembly-package-dependency包含 Scala 库。

于 2013-07-25T22:00:55.640 回答
4

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

于 2013-07-26T17:31:04.310 回答