通常不建议这样做,因为大多数 jar 库都是与程序员项目一起使用的。此外,与其他生态系统不同,jar 库通常通过一些用户模式库管理工具安装,如 ivy 或 maven 或 sbt,正如您可能已经观察到的那样。
如果您真的想要这样做,您可以将 jars 安装到 scala 的 TOOL_CLASSPATH 位置,您可以从与您的 scala 发行版捆绑在一起的 scala.bat 或 scala shell 脚本文件中找到该位置.或者,您可以构建自己的自定义 scala repl,它可以从某个配置的位置加载全局可安装的库。无论哪种方式,它都需要使用TOOL_CLASSPATH。
P.S:我目前无法访问实际的 scala.bat 文件来帮助您解决此问题,但您可以查看 here 和 here 以了解我的意思。请注意,这些文件可能不会显示 .bat 文件的结构与发行版中的文件相同(并且可能已经过时)。请在官方发行版中查找信息。
编辑
现在我可以再解释一下,因为我回来查看了官方发行版中包含的 实际 scala 批处理和 shell 脚本 :-)
就像我上面所说的,scala 脚本会加载其TOOL_CLASSPATH 文件夹(通常是${SCALA_HOME}/lib)中存在的所有 jar 文件。它还提供了使用有前途的-toolcp 选项添加到TOOL_CLASSPATH 的能力 - 让我们看看它显示了什么:(批处理脚本类似 - 我将只显示来自scala shell 脚本的内容)
while [[ $# -gt 0 ]]; do
case "$1" in
-D*)
# pass to scala as well: otherwise we lose it sometimes when we
# need it, e.g. communicating with a server compiler.
java_args=("${java_args[@]}" "$1")
scala_args=("${scala_args[@]}" "$1")
shift
;;
-J*)
# as with -D, pass to scala even though it will almost
# never be used.
java_args=("${java_args[@]}" "${1:2}")
scala_args=("${scala_args[@]}" "$1")
shift
;;
-toolcp)
TOOL_CLASSPATH="${TOOL_CLASSPATH}${SEP}${2}"
shift 2
;;
-nobootcp)
unset usebootcp
shift
;;
-usebootcp)
usebootcp="true"
shift
;;
-debug)
SCALA_RUNNER_DEBUG=1
shift
;;
*)
scala_args=("${scala_args[@]}" "$1")
shift
;;
esac
done
如您所见,这是 非常 限制 - 您必须指定要添加的 每个 jar。你可以使用-cp!我们可以做得更好吗?当然,我们不得不在这个toolcp 业务中混日子。
addtoToolCP() {
for i in $(find $1 -name "*.jar")
do
if [[ -z "$TOOLCP" ]]
then
TOOLCP="$i"
else
TOOLCP="${TOOLCP}:$i"
fi
done
}
因此,您可以检查我们的 TOOLCP 参数是否为空,如果它不为空,则相应地将 scala 称为 scala -toolcp $TOOLCP。现在,您可以将您的 shell 脚本调用为:myscalascript <list-of-paths-to-be-added-to-toolcp>。或者您可以只保留一个文件夹并继续向该文件夹添加新库。希望这会有所帮助 - 正如其他人所说,请注意二进制兼容性问题。二进制不兼容问题只会影响主要的 scala 版本,次要版本应该完全兼容。最后,冒着重蹈覆辙的风险,仅在您确定要这样做的情况下使用。 :-)