在 Intellij IDEA 2017.2 中,我尝试导入一个现有的多模块 Maven 项目,该项目可以通过 Maven 在 IDE 之外正常构建。导入完成后,我注意到在其中一个 Maven 子模块中,有一个符号未解析,我们将此子模块称为 submodule-problem。未解析的符号是在另一个子模块中定义的类,我们称之为submodule-other。问题是,在 submodule-problem 中,在 submodule-other 级别的其他子模块中定义的其他类都可以找到(这些子模块在 submodule-problem 的 pom 文件中定义为依赖项)。此外,submodule-other 没有在 submodule-problem 的 pom 文件中声明为依赖项。但我不必这样做,因为正如我提到的,mvn clean install -Dmaven.test.skip=true
工作正常。 mvn test-compile
也是如此。我正在使用最新的 Maven 3.5.0,并指示 IDEA 在项目的 Maven 设置中对所述导入的项目使用相同的版本。注意:我无权展示代码或相关的 POM 文件。
到目前为止我尝试解决该问题的方法是:
- 多次使缓存无效并重新启动 IDEA
- 多次重新导入为 Maven 项目
- 从该项目中删除 .idea 文件夹和所有 *.iml 文件,然后重新导入为 Maven 项目,几次
- 删除 IDEA 的系统首选项文件夹并多次重试之前的所有步骤(这一步很痛苦,因为我必须重新安装所有插件并配置 IDE 设置)
- 将同一项目导入 Eclipse-Oxygen,发现项目导入没有任何问题。
最佳答案
我已经解决了这个问题。事实证明,使用IntelliJ IDEA IDE没有任何问题(至少我认为没有)。在生产中,我的顶级项目是另一个父 Maven 项目的子项目,因此它的 pom 文件中的版本使用 ${project.version}
引用父项目的版本。而在开发中,它是父项目,较低级别的项目是它自己的子项目。因此,在所有 pom.xml 文件中,我的顶级项目使用 ${project.version}
来引用生产父级,也在子 pom 中引用我的顶级项目项目作为其父级,我将其更改为像 1.0.0-SNAPSHOT
这样的文字,所有问题都消失了,我什至不必将项目重新导入 IDE。
现在,正如我在原来的帖子中提到的,即使不需要这样做,Maven 构建项目也没有问题。如果有人知道的话我很想知道为什么。也许 IDE 需要我这样做是因为它试图强制执行一些最佳实践?我通过观看 idea.log
找到了解决方案,它提示某些 POM 无效,并且实际上在这些 pom 文件中,版本标记有一个红色的波浪形下划线。
关于java - Intellij IDEA 2017.2 无法解析符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45376556/