配置IntelliJ以使用Groovy编译器而不是Java编译器

lim*_*imc 8 java groovy intellij-idea maven

在我的maven项目中,我正在将我的Java代码与一些Groovy代码混合在一起.我现在主要使用Groovy构建bean.我的一些Java代码直接使用Groovy bean.

我像这样配置了Maven编译器插件: -

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.1</version>
    <configuration>
        <compilerId>groovy-eclipse-compiler</compilerId>
        <source>${jdk.version}</source>
        <target>${jdk.version}</target>
    </configuration>
    <dependencies>
        <dependency>
            <groupId>org.codehaus.groovy</groupId>
            <artifactId>groovy-eclipse-compiler</artifactId>
            <version>2.8.0-01</version>
        </dependency>
        <dependency>
            <groupId>org.codehaus.groovy</groupId>
            <artifactId>groovy-eclipse-batch</artifactId>
            <version>2.1.5-03</version>
        </dependency>
    </dependencies>
</plugin>
Run Code Online (Sandbox Code Playgroud)

当我使用我的测试用例时mvn test,它工作得很好.

但是,当我通过右键单击测试文件直接从IntelliJ运行测试用例并运行它时,我在Groovy bean上遇到"找不到符号"错误.当我读取错误日志时,IntelliJ使用Java编译器在运行测试之前编译我的项目...因此,测试失败.

我似乎无法弄清楚如何指示IntelliJ始终使用Groovy编译器而不是Java编译器.

我应该在SDK下更改什么才能使用Groovy编译器?我尝试添加Groovy相关的JAR文件,但我还有其他错误.

在此输入图像描述

更新1:根据@Seagull建议

我在"全球图书馆"下添加了groovy JAR: -

在此输入图像描述

当我直接从IntelliJ执行测试文件时,我收到一些Groovy警告,我仍然得到同样的错误: -

在此输入图像描述

谢谢.

Nic*_*aly 5

我对的IntelliJ的最新版本,这个问题ideaIC-15.0.3定制-JDK-bundled.dmg的MAC 10.10.5,JDK 1.8.0_60.

包括后代的所有步骤......

  1. 从终端,我groovy使用sdkman安装了最新版本:sdk install groovy 2.4.5
  2. 在Intellij中,右键单击顶部项目>选择"添加框架支持...">添加groovy 2.4.5(如果尚未添加).
  3. 在Intellij中,"首选项">"构建,执行,部署">"编译器">"资源模式:">将订单从更改!?*.java;!?*.groovy为!?*.groovy;!?*.java
  4. 重新编译项目(Command+ Shift+ F9),它现在应该成功编译.


lim*_*imc 3

这是 IntelliJ 支持团队于 2014 年 1 月 2 日对此问题的回复:-

IDEA 使用 groovyc 为 Groovy 类生成 Java 存根,以实现无缝互操作。不幸的是,存根生成代码不会启动 AST 转换(例如 Immutable),因此这些转换生成的方法不会进入 Java 存根,因此 Java 编译器看不到它们。

不幸的是,我没有看到不需要修改项目的解决方法。一种是将 Groovy 文件放入单独的模块中。另一种方法是将调用位置更改为 Groovy。第三种方法是将 @Immutable 替换为 @Canonical 并生成构造函数,以便它实际上位于代码中(并且存根将包含它)。

您还可以投票/观看http://youtrack.jetbrains.com/issue/IDEA-52379 以支持 Eclipse Groovy 编译器。

我最终删除了@Immutableand@Canonical创建了我自己的构造函数,原因有两个:-

  • 它允许我直接从 IntelliJ 运行我的测试用例。
  • @Immutable它清理了由和免费提供的未使用构造函数造成的 JaCoCo 代码覆盖率报告@Canonical。