IntelliJ IDEA - 错误:java:包foo不存在。

4
我在IntelliJ IDEA中有一个项目,它包含Java和Groovy类。这些类被包含在标记为源文件夹的"groovy"和"java"文件夹中。我有很多Java类从"groovy"源文件夹导入类,但是当我尝试运行它们时,我总是会得到错误信息:"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不存在

不起作用的事情:

  • 将“framework”下的所有内容放在“groovy”文件夹下。结果为“无法解析符号bar”

  • 取消使用Maven并重新构建项目


取消/groovy的源标记,然后重试。或者将/foo包移出/groovy目录下。 - duffymo
在两种情况下均为:无法解析符号 'foo' - Ben Dohrmann
在你能够让它正常工作之前,先不要使用Maven。/foo的父级必须被标记为源代码。 - duffymo
@duffymo 我不确定你所说的“Leave Maven out of it”是什么意思。你是指在解决此问题之前禁用Maven吗? - Ben Dohrmann
@dratewka 不,Groovy类没有这个问题。 - Ben Dohrmann
显示剩余5条评论
3个回答

5
你不应该需要“unmavenize”你的项目。 (尽管我理解建议你这样做的故障排除原因。)我怀疑问题是缓存或索引损坏了。转到“文件>无效缓存”。选择使缓存无效,然后重新启动IDEA。让IDEA重新索引项目。一切应该都好。如果不是,请检查1)您是否使用最新版本的IDEA(12.1.5)和2)Groovy插件的最新版本(“文件>设置>[IDE设置]>插件”)。
当您使用maven时,您将需要在POM中将“groovy”目录标识为附加源目录。如果不这样做,则当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-compiler文档建议
这是工作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 IDEA版本是12.1.5,Groovy插件是最新的。我尝试将你的POM代码调整到我的代码中,但是这一行<version>${groovy-eclipse-compiler.version}</version>出现了错误消息Dependency org.codehaus.groovy:groovy-eclipse-compiler:2.8.0-01" not found。(在Eclipse中它可以正常工作。) - Ben Dohrmann
只是提供信息,我已经修复了POM文件,在其中添加了你的代码(仍然不确定出了什么问题),但是一位同事引入了一些新的错误,所以在继续之前我正在调查这个问题。 - Ben Dohrmann

2

重新启动IntelliJ :-)。虽然很傻,但这对我很有效。我不知道是什么原因导致了这个问题,但我很高兴它被解决了。希望这能对其他人有所帮助。


0

我曾经遇到过类似的问题。在我的情况下,Groovy编译记录了RuntimeException作为警告。这是因为没有找到适当的类加载器进行抓取。 在我解决了这个问题之后,Groovy源代码成功编译,并且Java类能够在类路径上看到它们。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接