scala - 将scala-compiler.jar添加为运行时依赖项

标签 scala executable-jar sbt proguard scalac

我正在使用sbt及其Proguard插件为我的程序创建一个可执行jar。但是,我的程序在运行时依赖scala-compiler.jar进行编译。我似乎无法将scala-compiler.jar放入我的最终jar中。 This page有一些非常相似的信息,但是我无法使其开始工作。有什么建议么?

编辑:这是我得到的最接近的:

override def proguardOptions = List(
  "-dontshrink -dontoptimize -dontobfuscate -dontpreverify -dontnote " +
  "-ignorewarnings",
  proguardKeepAllScala
)
override def proguardInJars =
  Path.fromFile(scalaLibraryJar) +++
  Path.fromFile(FileUtilities.scalaCompilerJar) +++
  super.proguardInJars

这包括在proguard min jar中的编译器jar,但是运行它我仍然得到:
Exception: java.lang.NoClassDefFoundError: scala/tools/nsc/settings/Scala Settings

最佳答案

这可行,但对调用sbt的位置敏感:

//proguard                                                                    
override def proguardOptions = List(
  "-dontshrink -dontoptimize -dontobfuscate -dontpreverify -dontnote " +
  "-ignorewarnings",
  proguardKeepAllScala
)

val cur =  new File(".").getAbsolutePath
override def proguardInJars =
  Path.fromFile(scalaLibraryJar) +++
  Path.fromFile(
    new File(cur, "project/boot/scala-" + crossScalaVersionString +
             "/lib/scala-compiler.jar")) +++
  super.proguardInJars

我不能使用FileUtilities.scalaCompiler Jar,因为它会得到sbt使用的2.7.7 jar,而不是跨Scala版本的编译器。

关于scala - 将scala-compiler.jar添加为运行时依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5999412/

相关文章:

scala - 为什么我的 Scala 类对其匹配的测试类不可见?

用于在 bintray 中发布的 Sbt

scala - 使用 Typesafe Config 的 ConfigFactory 在 build.sbt 中设置关键设置?

scala - 如何在 Scala 中同时使用 gcs-connector 和 google-cloud-storage

scala - 如何使用 Cats IO monad 实现 if-else 逻辑?

java - 从 jar 中提取文件后,如何将它们重新组合成一个有效的 jar?

java - 如何在启动时打开java应用程序或jar?

scala - Scala 中如何评估方法?

java - 使用 PlayWS 通过 Java 创建 WSClient - Materializer null

java - 访问可执行 jar 中的属性文件