通常不建议这样做,因为大多数 jar 库都是与程序员项目一起使用的。此外,与其他生态系统不同,jar 库通常是通过一些用户模式库管理工具安装的,如ivy
ormaven
或sbt
,正如您可能已经观察到的那样。
如果您真的想这样做,您可以将 jars 安装到 scala 的TOOL_CLASSPATH
位置,您可以从该位置scala.bat
或scala
与您的 scala 发行版捆绑在一起的 shell 脚本文件中找到该位置。或者,您可以构建自己的自定义 scala repl,它可以从某个配置的位置加载全局可安装的库。无论哪种方式,它都需要与TOOL_CLASSPATH
.
PS:我目前无法访问实际文件来帮助您解决此问题,但您可以在此处和此处scala.bat
查找以了解我的意思。请注意,这些文件可能不会显示 .bat 文件的结构与发行版中的文件相同(并且可能已经过时了)。请在官方发行版中查找以获取信息。
编辑
现在我可以再解释一下,因为我回来查看了官方发行版中包含的实际scala 批处理和 shell 脚本 :-)
就像我上面说的,scala
脚本会加载其文件夹中存在的所有 jar 文件,该TOOL_CLASSPATH
文件夹通常是${SCALA_HOME}/lib
. 它还提供了TOOL_CLASSPATH
使用有希望的-toolcp
选项添加的能力 - 让我们看看它显示了什么:(批处理脚本类似 - 我将只显示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 版本,次要版本应该完全兼容。最后,冒着重蹈覆辙的风险,只有当你确定你想要这个时才使用它。:-)