使用 SBT 将编译后的 Scala 文件打包到 jar 中

Posted

技术标签:

【中文标题】使用 SBT 将编译后的 Scala 文件打包到 jar 中【英文标题】:Packaging Compiled Scala Files Into Jars with SBT 【发布时间】:2016-01-23 02:46:14 【问题描述】:

我正在使用 Play Framework、Scala 和 SBT。我需要将我的项目分成模块,因为它变得太大了。由于我不熟悉 SBT,我创建了一个虚拟项目来玩。我的dummyproject 本身有一些控制器,一个带有一些实用程序的core 模块和一个使用来自core 模块的一些实用程序的models 模块。

我的主要目标是避免编译模块,除非绝对必要(例如,它的代码已更改。)。

我可以使用dependsOn 使模块相互依赖,但据我了解,它们依赖于其他模块的代码。

我想做的是以某种方式将每个模块的编译文件打包成 jar 文件,并使依赖项使用 jar 文件而不是代码本身。我怎样才能做到这一点?

【问题讨论】:

Sbt 包***.com/a/20938836/3561471 【参考方案1】:

我的主要目标是避免编译模块,除非绝对必要(例如,它的代码已更改。)。

这就是 SBT 所做的。如果代码没有改变,模块将不会被重新编译。即使代码发生了变化,它也可能能够检测到这种变化不会影响依赖模块(例如,如果您只更改了私有成员)并且不会重新编译它们。如果您改用 jar 文件,则会损害增量编译并迫使 SBT 重新编译您的文件更多

如果您确实想依赖 JAR,一种方法是将您的项目拆分为几个独立的项目而不是模块,并以与添加任何其他库相同的方式添加依赖项。

【讨论】:

以上是关于使用 SBT 将编译后的 Scala 文件打包到 jar 中的主要内容,如果未能解决你的问题,请参考以下文章

sbt打包Scala写的Spark程序,打包正常,提交运行时提示找不到对应的类

SBT 任务将属性文件从项目文件夹复制到 webapp

Spark源码打包编译的过程

一个使用sbt编译的JNI C++ 的模板

如何使用 SBT 原生打包器部署 Scala Play 框架 API

scala maven sbt 哪个