Ajout de scala-compiler.jar comme dépendance d'exécution
-
13-11-2019 - |
Question
J'utilise sbt et son plugin Proguard pour créer un fichier jar exécutable pour mon programme.Cependant, mon programme repose sur scala-compiler.jar
au moment de l'exécution pour faire des compilations.Je n'arrive pas à comprendre scala-compiler.jar
dans mon dernier pot. Cette page a des informations très similaires mais je n'arrive pas à le faire fonctionner du début à la fin.Aucune suggestion?
MODIFIER:C'est ce qui s'en rapproche le plus que j'ai obtenu :
override def proguardOptions = List(
"-dontshrink -dontoptimize -dontobfuscate -dontpreverify -dontnote " +
"-ignorewarnings",
proguardKeepAllScala
)
override def proguardInJars =
Path.fromFile(scalaLibraryJar) +++
Path.fromFile(FileUtilities.scalaCompilerJar) +++
super.proguardInJars
Cela inclut le fichier jar du compilateur dans le fichier jar proguard min, mais en l'exécutant, j'obtiens toujours :
Exception: java.lang.NoClassDefFoundError: scala/tools/nsc/settings/Scala Settings
La solution
Cela fonctionne, mais est sensible à l'emplacement à partir duquel sbt
est appelé:
//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
je ne pouvais pas utiliser FileUtilities.scalaCompiler
Jar parce que cela obtient le pot 2.7.7 utilisé par sbt, pas le compilateur de version cross scala.