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

时间:2013-12-10 00:57:53

标签: java maven groovy intellij-idea

在我的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>

当我使用mvn test运行我的测试用例时,它运行正常。

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

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

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

enter image description here

更新1:根据@Seagull建议

我在“全球图书馆”下添加了常规JAR: -

enter image description here

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

enter image description here

感谢。

2 个答案:

答案 0 :(得分:5)

我在MAC 10.10.5 上的最新版本的Intellij ideaIC-15.0.3-custom-jdk-bundled.dmg 上遇到此问题,JDK 1.8.0_60

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

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

答案 1 :(得分:3)

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

  

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

     

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

     

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

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

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