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

发布于 2024-11-07 12:06:54 字数 755 浏览 4 评论 0原文

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

I'm using sbt and its Proguard plugin to create an executable jar for my program. However, my program relies on scala-compiler.jar at runtime to do compilations. I can't seem to get scala-compiler.jar into my final jar. This page has some very similar information but I can't get it to work beginning to end. Any suggestions?

EDIT: This is the closest I have gotten:

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

That includes the compiler jar in the proguard min jar, but running it I still get:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

天涯沦落人 2024-11-14 12:06:54

这有效,但对调用 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 版本编译器。

This works, but is sensitive to the location from which sbt is called:

//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

I could not use FileUtilities.scalaCompilerJar because that gets the 2.7.7 jar that sbt uses, not the cross scala version compiler.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文