Intellij IDEA编辑器:classpath命令

时间:2011-12-12 19:13:58

标签: java intellij-idea

我试图为此寻找解决方案,但没有任何乐趣:在Intellij IDEA我设置了一组模块,以便我有以下内容:

  • 我的Web项目(所有模块依赖项设置为'运行时')
  • 我的Web项目依赖关系#1(+将JAR复制到MWP的/ WEB-INF / lib的工件)
  • 我的Web项目依赖关系#2(+将JAR复制到MWP的/ WEB-INF / lib的工件)

依赖关系#1有一个类org.acme.foo,但MWP也是如此,定义不同(哦,欢乐)。它构建正常 - MWP中的所有代码都正确地构建在MWP中的类而不是依赖性#1。

但是......在它的编辑器中,Intellij给了我红色的波形,因为它更喜欢用它不相容的定义来引用Dependency#1中的类。

忽略这个类/包冲突确实不存在的事实,任何人都可以帮助我推动Intellij查看本地模块中的类,而不是依赖类中的类吗?

编辑:我正在使用最新的Intellij 11。

编辑:对于任何发现此问题的人来说,这些麻烦在Intellij 12 +

中消失了

4 个答案:

答案 0 :(得分:12)

我遇到了这个问题并且正在使用弗拉基米尔的答案(因此我的upvote)但不幸的是我发现我不得不继续重新编辑.iml文件,因为它经常被重写。经过一番挖掘后,我发现了如何永久改变它:

导航到文件 - >项目结构 - >模块 - > - >依赖选项卡

IntelliJ会按照列表中的顺序将依赖项添加到类路径中。要移动它们,只需突出显示要移动的依赖项,然后使用底部工具栏上的向上和向下箭头。

答案 1 :(得分:10)

我在IntelliJ 11(Mac OS X版本)中面临同样的问题。

我手动编辑了项目的.iml文件,并按正确的顺序重新排列了依赖项:我将包含正确版本的.jar文件的orderEntry元素放在最上面。

希望这有帮助。

答案 2 :(得分:1)

就我而言,它在Eclipse中运行良好但在IntelliJ中发生。原因是工具根据不同的机制加载libs / jar:

  • Eclipse:.classpath文件
  • IntelliJ:* .iml files

我有一堆libs / jars在一个目录中。该目录包含在* .iml文件中,如此<orderEntry type="library" name="external-libs" level="project" />有2个库/罐有冲突(两者都包含&#34; org.joda.time.DateTime&#34;在我的情况下)。但是2个DateTimes具有不同的功能。我必须指定其中一个应该在另一个之前加载。

解决方案:

  1. 转到&#34;文件 - &gt;项目结构 - &gt;依赖关系&#34;
  2. 按&#34; +&#34;底部的按钮,包括我想先加载的lib / jar。
  3. 使用向上/向下按钮将刚刚包含的lib / jar移动到冲突目录/ jars / libs之上。
  4. 重建项目。
  5. 查看截图。 joda-time-2.4.jar被添加到external-libs之上以控制加载序列。 joda-time-2.4.jar is added before external-libs to be loaded first.

答案 3 :(得分:0)

我遇到了类似的问题,我正在努力解决这个问题。

我发现了两种情况,我知道这种情况发生了,并找到了解决其中一种情况的方法。

场景1)您的类引用了链路上的类路径,而不是在jar中找到的类,但是在import语句中,import语句的格式为

import com.company.classes.to.use.*

通过填充它们,IDE似乎从同一个jar位置获取该包中的所有类。通过将它们分成单独的导入类语句,IDE将单独选择它们。

场景2)您为重写的类使用菊花链方法。

something.getSomethingElse().getAnotherThing().getYetAnotherThing();

如果getSomethingElse()返回一个在类中没有的对象(所以你不必导入它),那么你仍然会得到错误。 (添加导入会使该行变为灰色,因为它识别它并未使用,因此无效)。无论如何,我不会宽恕这种方法。

编辑:显而易见的替代方法是重构代码以将行分解为

ObjectToImport obj = something.getSomethingElse();
result = obj.getAnotherThing.getYetAnotherThing();

然后导入临时变量...

显然这并不理想,你不应该为了IDE而重构你的代码,但是需要,那些红线会让我烦恼不已。

我希望这些帮助。如果您找到了更好的解决方案,请分享!

此致 中号

相关问题