从Gradle同步时,IntelliJ会覆盖Scala其他编译器选项

时间:2014-08-13 12:52:49

标签: scala intellij-idea gradle

我正在使用IntelliJ IDEA中的Scala项目,并使用Gradle进行配置和依赖关系管理。

每次我添加一些新的依赖项并将其同步到IDEA时,它会将其他编译器选项重写为-target:jvm-1.8,当我尝试使用IDEA时会导致错误:< / p>

Error:scalac: 'jvm-1.8' is not a valid choice for '-target'
Error:scalac: bad option: '-target:jvm-1.8'

所以我需要手动修复它。

我可以在 build.gradle 中设置目标JVM版本或编译器参数(还需要-feature选项),以便从那里获取它们吗?

谢谢!

2 个答案:

答案 0 :(得分:6)

您可以将sourceCompatibility = '1.7'添加到您的gradle构建文件中,然后刷新,项目将正常构建。请注意,这样您就不能在代码中使用Java 8源代码,这是一个临时的黑客攻击,直到GradlewareJetBrains解决问题。

您还可以篡改运行gradle idea时生成的IDEA项目XML。这将为您提供包含其他标志的选项。您可以通过打开项目.iml文件并确定需要更改的内容来检查当前的xml,然后使用以下代码:

apply plugin: 'idea'

idea {
  module {
    iml {      
      withXml {
        def node = it.asNode()
        //modify xml
      }
    }
  }
}

不会推荐它,因为你必须坚持使用gradle idea并且不能直接从IDEA直接导入,但目前没有更好的方法来获得额外的标志。文档 - idea pluginidea module

答案 1 :(得分:0)

我多年来一直在寻找解决方案,终于找到了 - 分享给其他读这篇文章的人。

取自:https://devnet.jetbrains.com/message/5523902

subprojects {
    tasks.withType(ScalaCompile) {
        sourceCompatibility = "1.7"
        targetCompatibility = "1.7"
    }
}