3

我正在使用 sbt 及其 Proguard 插件为我的程序创建一个可执行 jar。但是,我的程序在运行时依赖于scala-compiler.jar进行编译。我似乎无法scala-compiler.jar进入我的最后一个罐子。这个页面有一些非常相似的信息,但我无法让它从头到尾工作。有什么建议么?

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

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
4

1 回答 1

1

这有效,但对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.scalaCompilerJar,因为它获得了 sbt 使用的 2.7.7 jar,而不是跨 scala 版本编译器。

于 2011-05-14T17:14:02.463 回答