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

Intellij idea 在IDEA中,有没有办法强制重新索引Maven快照?,intellij-idea,maven,Intellij Idea,Maven,我们有一个大型的多模块Maven项目。通常的工作方式是检查一些您感兴趣的模块,对于它们所依赖的其他模块,使用Maven提供的snapshot JAR 这似乎大部分是可行的;当我们需要更新快照时,我们只需从“Maven项目”选项卡强制重新导入。但是,重新导入的快照似乎从未重新编制索引 复制步骤: 在一个项目中,签出/配置依赖于某个其他模块的Maven快照的模块 在一个单独的项目中,对另一个模块进行更改,例如添加一个方法,并将其部署到Maven存储库中 在第一个项目中,更新快照 在第一个项目中,编写

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

这似乎大部分是可行的;当我们需要更新快照时,我们只需从“Maven项目”选项卡强制重新导入。但是,重新导入的快照似乎从未重新编制索引

复制步骤:

  • 在一个项目中,签出/配置依赖于某个其他模块的Maven快照的模块
  • 在一个单独的项目中,对另一个模块进行更改,例如添加一个方法,并将其部署到Maven存储库中
  • 在第一个项目中,更新快照
  • 在第一个项目中,编写一些调用新方法的代码
  • 预期:

    • 调用新方法没有问题
    实际:

    • 方法调用用“无法解析方法”错误红线批注。然而:
      • 代码不会编译(通过构建或上下文菜单)
      • 代码确实在运行,包括调用新方法的代码
    有办法解决这个问题吗?这将是很好的摆脱红线,有自动完成等工作,并在一般情况下能够继续使用你们的想法应该的方式

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


    (“从不”似乎有悖常理,但我认为这对开发人员来说是正确的:手动更新依赖项,就像手动更新VCS中的源代码一样。对于真正的构建,我们让Hudson覆盖POM设置。更重要的是,将其设置为“从不”可以阻止Eclipse进行不必要的完全重新编译。)

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


    哦,你最后在()中的论证听起来很可疑。我在Eclipse中没有遇到这些问题。您正在使用M2Eclipse插件吗?我认为“从不”对开发者来说是不正确的。事实上,我相信它应该永远为开发者服务。。这是默认行为。

    有时单击“同步”(窗口左上角保存按钮附近的黄色箭头)可以解决这一问题-我认为这会迫使IDEA在文件系统上查找任何更新的JAR文件。可能是文件系统通知中的错误


    (在本例中,您的maven项目指向所有正确的JAR,但IDEA没有为新的JAR文件重新编制索引。因此,问题在于文件系统索引,而不是maven项目设置)

    我执行了以下操作:

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

    选择适当的存储库(本地)并单击更新


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

    在升级到2010-02-09版本的M2Eclipse之前,这里没有人遇到过这个问题,但IAM也出现了类似的问题。也许这也是我们代码库大小的一个因素。为什么你认为“总是”是正确的?在我看来,这似乎意味着无论您是否需要,对您当前未处理的任何代码的更新都会推送到您手中,而不是在您需要时拉到它们。如果代码也在积极(潜在的不稳定)开发中,这似乎是个坏消息。但也许我误解了设置?我在发布后就换了工作,但根据IDEA和Maven最近的经验,我怀疑你是对的——如果“同步”不能解决问题,强制重建索引可能会解决。我很少需要重建索引(假设你指的是使缓存失效?)