【问题标题】:How to instruct gradle's scala plugin to pick specific JVM among installed ones?如何指示 gradle 的 scala 插件在已安装的 JVM 中选择特定的 JVM?
【发布时间】:2014-07-25 12:43:07
【问题描述】:

我想用特定的 JVM 运行 scala 编译。我正在使用 Scalatra,我的默认 JVM 是 1.8。通过这样的设置,我遇到了这个问题:Compilation failed: error while loading AnnotatedElement, ConcurrentMap, CharSequence from Java 8 under Scala 2.10?

所以我想为此使用 JVM 1.7,如何为 gradle "scala" 插件设置它?

【问题讨论】:

    标签: scala gradle jvm scalatra


    【解决方案1】:

    如何指示 gradle 的 scala 插件在已安装的 JVM 中选择特定的 JVM?

    目前不支持此功能。最好的解决方案是使用所需的 JVM 运行 Gradle 本身。 可能可以通过...设置不同的 JVM 引导类路径...

    tasks.withType(ScalaCompile) {
        scalaCompileOptions.with {
            useAnt = false
            fork = true
            forkOptions.jvmArgs = [...]
        }
    }
    

    ...,但您必须自己弄清楚细节(请参阅 JVM 文档)。此外,您还必须知道 JVM 安装路径。

    【讨论】:

      【解决方案2】:

      scalac编译器有特殊参数

      –javabootclasspath 路径
      覆盖 Java 引导类路径。
      --javaextdirs 路径
      覆盖 Java extdirs 类路径。

      您必须使用 additionalParameters 参数从 gradle scala 插件传递这些参数

      这种方法不需要分叉

      allprojects {
        tasks.withType(ScalaCompile) {
          if (sourceCompatibility == '1.7') {
              scalaCompileOptions.with {
                  def jdk7rt = new File("$System.env.JAVA7_HOME", "jre/lib/rt.jar").canonicalPath
                  def jdk7ext = new File("$System.env.JAVA7_HOME", "jre/lib/ext").canonicalPath
                  additionalParameters = ["-javabootclasspath $jdk7rt".toString(), "-javaextdirs $jdk7ext".toString()]
              }
      
          }
        }
      }
      

      我在我的操作系统上使用这种方法,默认使用 JVM 1.7 来使用 JDK8 编译一些需要 javafx8 的子项目。所以它应该适用于你的情况。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-02
        相关资源
        最近更新 更多