在IDEA中,有没有办法强制重建Maven快照索引?

时间:2010-03-04 08:50:11

标签: intellij-idea maven

我们有一个大型多模块Maven项目。通常的工作方式是查看您感兴趣的几个模块,对于他们所依赖的其他模块,使用Maven提供的快照JAR。

这似乎很有用;当我们需要更新快照时,我们只需从“Maven项目”选项卡强制重新导入。但是,重新导入的快照似乎永远不会重新编制索引。

重现的步骤:

  1. 在一个项目中,检查/配置依赖于某个其他模块的Maven快照的模块。
  2. 在另一个项目中,对其他模块进行更改,例如添加方法,并将其部署到Maven存储库。
  3. 在第一个项目中,更新快照。
  4. 在第一个项目中,编写一些调用新方法的代码。
  5. 预期:

    • 调用新方法没问题。

    实际值:

    • 方法调用带有“无法解决方法”错误的红线。然而:
      • 代码编译(通过构建或上下文菜单)
      • 代码确实运行,包括调用新方法的代码

    有什么方法可以解决这个问题吗?摆脱红线,自动完成等工作会很好,并且通常能够按照你应该的方式继续使用IDEA。

    可能相关:我们有Eclipse和IDEA开发人员的混合,为了解决一些Eclipse / Maven集成错误,我们在我们的pom.xml文件中将快照updatePolicy设置为“never”。但是,我希望IDEA设置(Snapshot更新策略:Always update)可以覆盖它,除非我误解了设置的作用。

    (“Never”可能看起来违反直觉,但我认为这对开发人员来说是正确的:手动更新依赖关系,就像手动更新VCS中的源代码一样。对于实际构建,我们仍然使用Hudson覆盖POM设置。更重要的是,将它设置为“never”会使Eclipse免于不必要的重新编译。)

3 个答案:

答案 0 :(得分:2)

有时点击'synchronize'(窗口左上方保存按钮旁边的黄色箭头)可以解决这个问题 - 我认为这会迫使IDEA在文件系统上查找任何更新的JAR文件。可能是文件系统通知中的错误......

(在这种情况下,您的maven项目指向所有正确的JAR,但IDEA没有重新索引新的JAR文件。所以文件系统索引是问题,而不是maven项目设置)

答案 1 :(得分:0)

对不起我真的没有真正的答案,但我非常怀疑你的问题来自于updatePolicy被设置为never。你能澄清为什么你认为有必要吗?如果IDEA设置没有正确覆盖这一点,我一点都不会感到惊讶。您可以使用maven帮助插件和有效的pom来查看它是否适合IDEA。

哦,你在()中的理由听起来非常可疑。我没有在Eclipse中遇到过这些问题。你在使用M2Eclipse插件吗?我认为“从不”对开发人员来说是不正确的。事实上,我认为应该始终为开发人员......这是默认行为。

答案 2 :(得分:0)

我执行了以下操作:

打开首选项>构建,执行,部署>构建工具> Maven>存储库

选择适当的存储库(本地),然后单击“更新”。

重新索引并在依赖jar中搜索新添加的类,并且IntelliJ建议了工件和相关的导入。