是否有类似“Java共享库”的内容可以最大限度地减少已部署应用程

时间:2014-10-07 09:14:12

标签: java scala deployment sbt dependency-management

让我们想象一下,我创建了一堆用Scala和/或Java编写的命令行实用程序,并且我使用SBT来构建它们。它们都使用了几个库,其中一些非常大,而对于Scala,也是(不是那么小)Scala标准库。

我希望以完全构建的形式(可运行的.jar文件)使用这些实用程序,以便能够立即启动它们中的任何一个,并且如果需要,还可以轻松地分发它们。但我不想要的是将它们的依赖项包含在所有这些中,因为它们将占用磁盘空间。相反,我希望他们在运行时从共享文件夹中获取依赖项,而应用程序jar应该只包含" my"类。

问题是,有没有一种标准的方法来实现这一目标?如果是,那么必须共享.jar所在的位置?否则,你会建议做什么?

2 个答案:

答案 0 :(得分:2)

您可以为此设置CLASSPATH

JRE在.jar中命名的CLASSPATH个文件中搜索了类。

此外,还使用了目录.jar中的所有jre/lib/ext个文件。

要在课堂中查找完整的序列,请参阅official documentation from Oracle

答案 1 :(得分:2)

您可能想要考虑的事情(尽管需要稍微改变您打算做的事情)是拥有本地Maven存储库。

您可以在构建时向其发布SBT库。您可以通过SBT运行应用程序,而不是构建可运行的JAR,这将在需要时从本地存储库中提取库。

这样做的好处是,所有这样做的管道都内置在SBT中,这将使分发变得微不足道。

缺点是您必须通过SBT运行应用程序,而不是构建可运行的JAR。这是否适合你,我不知道。