我在IntelliJ IDEA中有一个由Java和Groovy类组成的项目。这些类包含在我标记为源文件夹的文件夹"groovy"和"java"中。我有许多从"groovy"源文件夹导入类的 Java 类,但是当我尝试运行它们时,我总是收到错误"java:package foo 不存在"。包"foo"直接存在于"groovy"文件夹下,所以这应该可以工作。我在下面包括了一个视觉效果。(我试图避免任何具体细节。我可能正在也可能不在从事一个绝密的51区项目。
结构可视化:
project-folder
|
-src
|
-main
|
-groovy (marked as source)
||
|-foo
| |
| -bar.groovy
-java (marked as source)
|
- java class that imports "foo.bar"
错误:Java:软件包 foo 不存在
不起作用的事情:
将所有内容都放在"框架"下,并将它们直接放在"groovy"文件夹下。导致"无法解析符号栏">
取消项目和重建
你不应该"取消"你的项目。(尽管我理解建议您这样做的故障排除原因。我怀疑问题是缓存或索引损坏。转到文件>使缓存失效。选择使缓存失效,然后重新启动 IDEA。让 IDEA 重新索引项目。事情应该没问题。如果没有,请检查 1( 您使用的是最新版本的 IDEA (12.1.5( 和 2( 最新版本的 Groovy 插件(文件> 设置> [IDE 设置]>插件(。
当您使用 maven 时,您需要将"groovy"目录标识为 POM 中的附加源目录。如果不这样做,当IDEA重新导入项目(即重新同步到POM(时,它将删除groovy
目录作为源,因为默认情况下maven不将其视为源。如何执行此操作取决于您使用的插件。由于GMaven不再维护,我一直在使用groovy-eclipse-compiler插件。如果您使用该插件,该插件将自动包含src/main/groovy
作为源(只要src/main/java
中至少有一个 java 或 groovy 文件(。但是,IDEA 不会选取该目录并将其作为源包含在内。这意味着如果您手动(或 IDEA 自动(运行 maven 重新导入,您的src/main/groovy
目录将未标记为源,并且 IDEA 将显示编译错误。 您需要指定其他目录。您可以使用 build-helper-maven-plugin 来执行此操作,如 groovy-eclipse-编译器文档建议的那样。
以下是用于Java/Groovy项目的POM的肉和土豆:
<properties>
<groovy.version>2.1.5</groovy.version>
<groovy-eclipse-compiler.version>2.8.0-01</groovy-eclipse-compiler.version>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<compilerId>groovy-eclipse-compiler</compilerId>
</configuration>
<dependencies>
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-eclipse-compiler</artifactId>
<version>${groovy-eclipse-compiler.version}</version>
</dependency>
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-eclipse-batch</artifactId>
<version>2.1.5-03</version>
<scope>compile</scope>
</dependency>
</dependencies>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<executions>
<execution>
<id>add-source</id>
<phase>generate-sources</phase>
<goals>
<goal>add-source</goal>
</goals>
<configuration>
<sources>
<source>src/main/groovy</source>
</sources>
</configuration>
</execution>
<execution>
<id>add-test-source</id>
<phase>generate-test-sources</phase>
<goals>
<goal>add-test-source</goal>
</goals>
<configuration>
<sources>
<source>src/test/groovy</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
<version>${groovy.version}</version>
</dependency>
</dependencies>
重新启动 IntelliJ :-( 愚蠢,但这就是对我有用的。 不知道是什么导致了这个问题,但我很高兴它已解决。 希望这对其他人也有帮助。
我也有类似的问题。就我而言,时髦的编译记录了运行时异常作为警告。这是因为没有找到合适的类加载器进行抓取。在我修复此问题后,Groovy源代码被成功编译,Java类能够在类路径上看到它们。