我在scala中编码并使用带有sbt-assembly插件的SBT。我的项目有很多外部库,因此sbt-assembly需要很长时间来打包JAR文件。我想为我的代码和依赖项提供单独的jar文件。因此,我可以简单地重新编译并重新打包我的代码。怎么做?
到目前为止进展:
build.sbt
中的以下命令阻止sbt-assembly打包库:
assembleArtifact in packageScala := false
assembleArtifact in packageDependency := false
然后可以通过传递以下命令来构建单独的jar:assembly
,assembly-package-scala
和assembly-package-dependency
。他们制作了三个罐子:一个包含我的程序,一个包含scala库,另一个包含所有依赖项。
但是,jar文件不再可执行,因为它在单独的jar文件中看不到依赖项。我想我需要为assembly-sbt添加一个类路径,但我不知道该怎么做。请帮助(详细评论表示赞赏,因为我是SBT的新手)。谢谢!
答案 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插件。到目前为止,我发现它是打包项目和依赖项的最简洁方法。