IntelliJ IDEA-错误:java:package foo不存在

IntelliJ IDEA-错误:java:package foo不存在,java,groovy,intellij-idea,importerror,Java,Groovy,Intellij Idea,Importerror,我有一个IntelliJ IDEA项目,它由Java和Groovy类组成。这些类包含在我标记为源文件夹的文件夹“groovy”和“java”中。我有许多Java类从“groovy”源文件夹导入类,但当我尝试运行它们时,始终会出现错误“Java:package foo不存在”。包“foo”直接存在于“groovy”文件夹下,因此应该可以正常工作。我在下面加入了一个视频。(我尽量避免透露任何具体细节。我可能会也可能不会参与绝密的51区项目。) 结构视觉: project-folder | -src

我有一个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不存在

不起作用的事情:

  • 将所有内容放在“框架”下,并将它们直接放在“groovy”文件夹下。导致“无法解析符号栏”

  • 非农化工程与改造

您不应该“取消”您的项目。(尽管我理解建议您这样做的故障排除原因。)我怀疑问题在于缓存或索引损坏。转到文件>使缓存无效。选择以使缓存无效,然后重新启动IDEA。让IDEA重新编制项目索引。事情应该会好起来的。如果没有,请检查1)您使用的是最新版本的IDEA(12.1.5)和2)最新版本的Groovy插件(文件>设置>[IDE设置]>插件)

当您使用maven时,您需要将“groovy”目录标识为POM中的附加源目录。如果你不这样做,当想法重新导入项目(即重新同步到POM)时,它会将<代码> Groovy src/main/groovy作为源代码(只要
src/main/java
中至少有一个java或groovy文件)。然而,IDEA并没有选择那个目录,并将它作为一个源。这意味着如果您手动(或IDEA自动)运行maven重新导入,您的
src/main/groovy
目录将被取消标记为源代码,IDEA将显示编译错误。您需要指定附加目录。您可以使用buildhelpermaven插件作为groovyclipse编译器来实现这一点

下面是一个正在工作的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>

2.1.5
2.8.0-01
org.apache.maven.plugins
maven编译器插件
3.1
groovy eclipse编译器
org.codehaus.groovy
groovy eclipse编译器
${groovy eclipse compiler.version}
org.codehaus.groovy
groovy eclipse批处理
2.1.5-03
编译
org.codehaus.mojo
构建助手maven插件
添加源
生成源
添加源
src/main/groovy
添加测试源
生成测试源
添加测试源
src/test/groovy
org.codehaus.groovy
groovy all
${groovy.version}

我也有类似的问题。在我的例子中,groovy编译将RuntimeException记录为警告。这是因为。
在我解决了这个问题之后,groovy源代码被成功编译,Java类能够在类路径上看到它们。

重新启动IntelliJ:-)Dumb,但这对我来说是有效的。不知道是什么导致了这个问题,但我很高兴它被修复了。希望这对其他人也有帮助。

取消将/groovy标记为源代码,然后重试。或者将/foo包从/groovy下移出。在这两种情况下:
无法解析符号“foo”
将Maven排除在外,直到您可以执行此操作。必须将/foo的父级标记为源代码。groovy类在java导入中也有类似的问题吗?@duffymo我不确定你所说的“将Maven排除在外”是什么意思。你的意思是在问题解决之前禁用Maven吗?谢谢你的详细回答,Mark,但我仍然有麻烦。无效缓存和重新索引项目无效。我的IntelliJ IDEA版本是12.1.5,Groovy插件是最新的。我尝试将您的POM代码改编成我自己的,但是行
${groovy eclipse compiler.version}
收到错误消息
Dependency org.codehaus.groovy:groovy eclipse compiler:2.8.0-01“找不到”
(它在eclipse中工作正常)。仅供参考,我修复了添加代码的POM(仍然不确定哪里出了问题),但一些新的错误是由一位同事引入的,所以在继续之前,我将对此进行研究。