Scala需要哪些罐子?

时间:2018-01-12 04:32:52

标签: java scala

我在Java项目中使用Scala。

我注意到IntelliJ在生成的runnable jar工件中包含了以下所有jar(已提取):

scala-library-2.12.2.jar
scala-library-2.12.2-sources.jar
scala-reflect-2.12.2.jar
scala-reflect-2.12.2-sources.jar

忽略IDE或构建工具,我很好奇是否所有这些jar实际上都是运行包含用Scala语言编写的部分的代码所必需的。

我认为,如果我不使用这些jar中包含的任何Scala库,编译后的Scala代码实际上可以在没有它们的情况下运行(我并没有声称它是一个好主意 - 只是好奇)。

所以,我的问题是,哪些功能需要哪些罐子,以及我是否应该在任何使用Scala代码的应用程序中包含所有四个jar。

为了澄清,我的问题只与运行代码有关,而不是构建代码。

1 个答案:

答案 0 :(得分:2)

快速摘要

scala-library-2.12.2.jar始终是"必需"。只有使用反射的项目才需要Scala scala-reflect-2.12.2.jar。另外两个完全相同,但源代码也包含在包中,从不需要运行代码。

有点澄清,从技术上讲,答案是运行代码不需要那些罐子。这是因为从技术上讲,您不需要将依赖项打包在jar中的jar中。相反,您可以选择使用项目导出必要的类文件。但是我认为这有点迂腐,有点超出你的要求。

另外,请注意术语"必需"因为某些jar文件通常需要重新打包,作为许可或再分发协议的一部分。这不是技术要求,而是合法的要求。