ほとんどの jar ライブラリはプログラマー プロジェクトと一緒に使用することを意図しているため、これは通常はお勧めしません。ivy
また、他のエコシステムとは異なり、jar ライブラリは通常、またはmaven
または などのユーザー モード ライブラリ管理ツールを介してインストールさsbt
れます。
本当にこれを行いたい場合は、jar を scala のTOOL_CLASSPATH
場所から見つけるか、scala.bat
またはscala
scala ディストリビューションにバンドルされているシェル スクリプト ファイルにインストールできます。または、独自のカスタム scala repl を構築して、構成された場所からグローバルにインストール可能なライブラリをロードすることもできます。いずれにせよ、それはTOOL_CLASSPATH
.
PS: 現在、これを支援するための実際のscala.bat
ファイルにアクセスすることはできませんが、こことここで調べて、私の言いたいことを理解してください。これらのファイルは、.bat ファイルがディストリビューションのものとはどのように構成されているかを示していない可能性があることに注意してください (かなり古い可能性があります)。情報については、公式ディストリビューションで調べてください。
編集
戻ってきて、公式ディストリビューションに含まれている実際のscala バッチとシェル スクリプトを見たので、もう少し説明できます:-)
上で述べたように、scala
スクリプトTOOL_CLASSPATH
は、通常は${SCALA_HOME}/lib
. TOOL_CLASSPATH
また、有望なオプションで追加する機能も提供し-toolcp
ます-それが何を示すか見てみましょう:(バッチスクリプトは似ています-scala
シェルスクリプトからのものを示します)
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
。これで、シェル スクリプトを次のように呼び出すことができますmyscalascript <list-of-paths-to-be-added-to-toolcp>
。または、1 つのフォルダーだけを保持して、そのフォルダーに新しいライブラリを追加し続けることもできます。これが役立つことを願っています-他の人が言っているように、バイナリ互換性の問題に気をつけてください. バイナリの非互換性の問題は、scala のメジャー バージョンにのみ影響し、マイナー バージョンは完全に互換性があるはずです。最後に、自分自身を死ぬまで繰り返す危険があるため、これが確実に必要な場合にのみ使用してください。:-)