Добавление scala-compiler.jar в качестве зависимости времени выполнения - PullRequest
3 голосов
/ 14 мая 2011

Я использую 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

Это включает jar-код компилятора в proguard min jar, но, запустив его, я все равно получаю:

Exception: java.lang.NoClassDefFoundError: scala/tools/nsc/settings/Scala Settings

1 Ответ

1 голос
/ 14 мая 2011

Это работает, но чувствительно к месту, из которого 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, потому что он получает jar 2.7.7, который использует sbt, а не кросс-компилятор версии scala.

...