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

Posted

技术标签:

【中文标题】添加 scala-compiler.jar 作为运行时依赖项【英文标题】:Adding scala-compiler.jar as a runtime dependency 【发布时间】:2011-08-25 08:36:49 【问题描述】:

我正在使用 sbt 及其 Proguard 插件为我的程序创建一个可执行的 jar。但是,我的程序在运行时依赖scala-compiler.jar 进行编译。我似乎无法将scala-compiler.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

【问题讨论】:

没有人会(或不应该......)帮助你,除非你说出你尝试了什么以及它失败的原因。 我尝试了链接到的页面上的东西。它在运行时因“scala.tools.nsc ..... not found”而失败。 具体来说,Exception: java.lang.NoClassDefFoundError: scala/tools/nsc/settings/Scala Settings 【参考方案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 版本编译器。

【讨论】:

以上是关于添加 scala-compiler.jar 作为运行时依赖项的主要内容,如果未能解决你的问题,请参考以下文章

作为高效运维人员不得不思考的问题

将 iOS UIAutomation 作为操作后构建脚本运行会作为 posix spawn 错误返回

作为运维,你需要了解的jvm知识点

脚本实现新建脚本shebang及开头约定自动添加

作为运维工程师如何选择一个合适的机房

自动化运维工具Ansible(24)开发回调插件 mysql_plays