我需要在我的项目中使用的tools.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
}
FYI:我装箱率使用插件组装在一个独立的jar文件的应用程序。
编辑:
一个丑陋的解决办法是在复制tools.jar
文件到lib目录在我的项目,并添加:
excludedJars in assembly <<= (fullClasspath in assembly) map { cp =>
cp filter {_.data.getName == "tools.jar"}
}
在build.sbt
能不能更优雅的完成,无需复制的jar文件? 会更容易切换的JVM,并使用“正确” tools.jar
自动文件...