首页 文章

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

提问于
浏览
8

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

每次我添加一些新的依赖项并将其同步到IDEA时,它会将 Additional compiler options 重写为 -target:jvm-1.8 ,当我尝试使用IDEA时会导致错误:

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 回答

  • -2

    您可以将 sourceCompatibility = '1.7' 添加到您的gradle构建文件,然后刷新,项目将正常构建 . 注意,这样你就不能在你的代码中拥有Java 8源代码,这是一个临时的hack,直到 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

  • 6

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

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

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

相关问题