プロジェクトで tools.jar を使用する必要がありますが、ユーザーが既に持っているため、jar にパッケージ化する意味はあまりありません。それで、それを「動的依存関係」として使用することは可能ですか?つまり、自分ので見つかったファイルを使用してコードをコンパイルしたいのですが、それをパッケージ化したくありません。代わりにユーザーを使用して、実行時に二重のアクティブ化を使用してクラスパスに追加することを確認できます。例えば:tools.jar
JAVA_HOME
JAVA_HOME
object Main1 extends App {
val myjar = Main1.getClass.getProtectionDomain.getCodeSource.getLocation.getFile
val tools = System.getProperty("java.home").dropRight(3)+"lib/tools.jar" // drop "jre"
val arguments = Array("java", "-cp", myjar+":"+tools, "me.myapp.Main2") ++ args
val p = Runtime.getRuntime.exec(arguments)
p.getErrorStream.close
p.getOutputStream.close
}
参考までに、アセンブリ プラグインを使用してアプリをスタンドアロンの jar ファイルにパッケージ化します。
編集:
醜い解決策は、tools.jar
ファイルをプロジェクトの lib ディレクトリにコピーし、次を追加することです。
excludedJars in assembly <<= (fullClasspath in assembly) map { cp =>
cp filter {_.data.getName == "tools.jar"}
}
jarファイルをコピーせずに、よりエレガントに行うことがbuild.sbt
できますか? tools.jar
JVMを切り替えて、「正しい」ファイルを自動的に使用する方がはるかに簡単です...