平台:IntelliJ Community Edition 10.0.3
SDK:jdk1.6.0_21
操作系统:Windows 7
所以我对IntelliJ有一个奇怪的情况让我完全难过.我设置了一个Maven项目,并将log4j作为依赖项添加到pom.xml文件中.IDEA检查运行正常,我的单元测试全部编译运行.
然后我使用mvn install:install-file将hunnysoft的jmime库添加到我的本地maven存储库,如下所示.
mvn install:install-file -Dfile=jmime.jar -DgroupId=jmime \ -DartifactId=jmime -Dversion=3.1.1e -Dpackaging=jar
Maven将jar文件安装到我的本地存储库中.
然后我进入IntelliJ的Settings => Maven => Repository Services并更新了我的本地存储库(以便IntelliJ重新索引存储库内容).
最后,我将以下依赖项添加到我的pom.xml文件中(就在log4j依赖项之上).
jmime jmime 3.1.1e
我现在创建一个新类如下:
package com.stackoverflow.question; import org.apache.log4j.Logger; import com.hunnysoft.jmime.ByteString; import com.hunnysoft.jmime.Field; import com.hunnysoft.jmime.FieldBody; public class StackOverflowQuestion { public Field create(String name, String text) { Logger.getLogger(getClass()).debug("create entered"); FieldBody body = new FieldBody(); body.setText(new ByteString(text)); Field field = new Field(); field.setFieldName(name); field.setFieldBody(body); return field; } }
现在为了古怪.IntelliJ的意图机制拾取并识别maven pom文件中的Logger导入就好了.然而,对于所有的hunnysoft导入,它报告:"无法解析符号'ByteString/Field/FieldBody'",但是 Build => Compile'StackOverflowQuestion.java' 正确编译所有内容,我为这个类创建的单元测试运行正常(尽管意图将对create()的调用标记为问题区域).
所以在某处,IntelliJ忽略了意图子系统的jmime.jar文件.我很困惑,因为log4j依赖工作正常,一切都编译并运行正常.F12("转到声明")适用于Logger导入,但会中断所有jmime导入.
哦,另外一件事,如果我进入"项目"窗口中的"包"视图,会出现"com.hunnysoft.jmime"包,我可以看到我在"库"下面的代码片段中导入的所有类.从pom.xml文件中删除上述依赖项会导致此包消失并且编译中断.
似乎检查的类路径被破坏了,但在Settings => Intentions |中,似乎没有任何设置.编译器区域(不是我预期的任何这样的设置,我相信IDEA应该已经知道基于pom文件和JDK的正确类路径).
作为最后的实验,我创建了一个全新的标准J2SE应用程序项目(不使用maven),并将jmime.jar文件作为其库之一直接添加到项目中.我遇到了与上述新项目完全相同的问题.
这是来自jmime jar文件的MANIFEST.MF.
Manifest-Version: 1.0 Ant-Version: Apache Ant 1.5.4 Created-By: 10.0-b23 (Sun Microsystems Inc.) Name: com/hunnysoft/jmime/ Sealed: true Specification-Title: Hunny JMIME Specification-Version: 3.1.1 Specification-Vendor: Hunny Software, Inc. Implementation-Title: com.hunnysoft.jmime Implementation-Version: 3.1.1E Implementation-Vendor: Hunny Software, Inc.
我在这个jar文件中没有看到任何异常.
我最好的猜测是,问题可能是缺少依赖性问题.但AFAIK jmime应该是自包含的(JarAnalyzer没有提出任何东西,但我不确定如果缺少依赖jar).
那么,任何人都有任何IDAs?
首先,你应该尝试File | Invalidate Caches
,如果它没有帮助,删除IDEA系统目录.然后重新导入Maven项目,看看它是否有帮助.
在一些奇怪的情况下,编译类可能会报告错误信息并混淆IDEA.使用javap验证此jar中的类是否报告了正确的名称.
以下技巧为我解决了这个问题:
右键单击代码编辑器
将鼠标悬停在Maven上并展开
单击重新导入
我的想法版本是12.0.4
以上解决方案都不适合我.什么做了手动删除main.iml文件,它突然工作.
对于Gradle用户:
您可能需要将项目与build.gradle
文件同步.
您可以右键单击"项目"窗格下的gradle文件来执行此操作,但这似乎对我没有任何作用(我怀疑我的版本中存在错误).你会知道是否会发生这种情况,因为它不会启动你将要等待的任何IntelliJ任务.而是打开Gradle Tool窗格,然后单击同步(刷新)按钮.这对我有用,在那里无效缓存和重启没有.
我自己的情况:我正在使用Gradle的Scala项目并且必须这样做.
这是在另一个回答同样的问题提到这里,但仅此修复这对我来说.我在IntelliJ之外的一个单独的终端中完成所有构建.因此缓存需要为IntelliJ应用程序设置适当的权限才能读取它们.
从项目的根文件夹运行它.
$ mvn -U idea:idea
另外一步,当我执行文件 - >无效缓存并重新启动IDE时,打开一个项目.它在右上方弹出一个toastbox,询问我是否启用自动导入,这解决了问题.
另一件需要检查的事情:确保依赖项不重复.在我的情况下,我发现表现出这种行为的模块配置错误如下:它依赖于另一个模块,并且它依赖于另一个模块生成的jar.这意味着重复引用的每个符号都是模棱两可的.
项目结构中不一致/重复的模块名称对我来说是个问题.
去 File -> Project Strucutre -> Modules
单击具有红色下划线的模块
得到"依赖关系"选项卡
确保依赖项列表中实际存在红色的依赖项.如果没有,请重命名它们以匹配现有依赖项名称
当IntelliJ未正确关闭并因此无法正确保存重命名的模块名称时,可能会发生这种情况.
有固定的发表?由于2013年的"编译器大修"而出现了最初影响v11/12的问题.在2014年底之前讨论了Jira的相关问题.http: //youtrack.jetbrains.com/issue/IDEA-98425
同样在Jira IDEA-98425上标记为固定但未经验证(在v12.0.3上).下面的解决方法都没有帮助解决Windows 上版本13.1.1的"无法解决符号"问题
一个.删除.IdealIC13文件夹(然后,File\Invalidate Caches/Restart)
湾 从Maven Projects窗口,
b.1 mvn -U idea:idea - >执行这个maven目标假设重新加载依赖项.这工作正常,但自上次FRI以来,执行此maven目标失败,因为它试图重新编译项目(当然它失败为"无法解析符号",这就是我试图通过首先运行此命令来修复) mvn -version - 显示引用3.2.5的maven版本并且它正在工作
b.2只需右键单击项目,然后重新导入
b.3文件\ 无效缓存/重启
C.尝试启用和禁用此设置:文件 - >设置 - > Maven - >导入 - >"使用maven3导入项目"
d.设置\ Maven\Multiproject构建失败策略=结束时失败(而不是默认)
什么都行不通.在Maven上对IntelliJ支持发生了什么.
https://youtrack.jetbrains.com/issue/IDEA-99302
从JetBeans发布历史记录,https: //www.jetbrains.com/company/history.jsp
IntelliJ v14 NOV 2014
IntelliJ v13 DEC 2013
我假设v12固定(虽然未经验证)将被合并到后续版本中.任何一个与IntelliJ版本有类似问题的人?请分享您的经验.IntelliJ maven支持似乎被打破了.