2010-03-04 35 views
3

我们有一个大型的多模块Maven项目。通常的工作方式是检查你感兴趣的几个模块,以及他们依赖的其他模块,使用Maven提供的快照JAR。在IDEA中,有没有办法强制重新编排Maven快照?

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

重现步骤:

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

预计:

  • 不麻烦调用新方法。

实际:

  • 方法调用与 “无法解决方法” 的错误红线。但是:
    • 代码编译并(通过生成或上下文菜单)
    • 代码并运行,包括调用新方法

有一些解决这个方法的代码?这将是很好的摆脱红线,让自动完成等工作,并且通常能够继续按照你应该的方式使用IDEA。可能相关:我们有Eclipse和IDEA开发者的混合体,为了解决一些Eclipse/Maven集成的bug,我们在我们的pom.xml文件中设置了快照updatePolicy为“never”。但是,我期望IDEA设置(快照更新策略:始终更新)覆盖此设置,除非我误解设置的作用。 (“Never”看起来似乎违反直觉,但我认为开发人员是正确的:手动更新依赖关系,就像手动更新VCS源代码一样,对于真正的构建,我们有Hudson覆盖POM设置。重要的是,将它设置为“从不”会阻止Eclipse免于不必要的总重编译)

回答

2

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

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

+0

自从我张贴这篇文章以来,我已经更换了工作,但是基于IDEA和Maven的最新经验,我怀疑您是对的 - 如果“同步”无法解决问题,那么可能会强制重建索引。 –

+0

我很少需要重建索引(假设你的意思是无效的缓存?) – ianpojman

0

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

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

+0

没有人在这里问题,直到他们升级到M2Eclipse的2010-02-09版本,但IAM展示了类似的问题。也许这也是我们代码库大小的一个因素。 你为什么认为“总是”是正确的?在我看来,这似乎意味着更新您目前没有工作的任何代码会被推送给您,无论您是否希望它们,而不是在您希望它们时拉动。如果代码也处于积极(潜在的不稳定)发展状态,那么这似乎是个坏消息。但也许我误解了这个设置? –

0

我执行以下操作:

打开首选项>构建,执行,部署>生成工具>的Maven>库

选择合适的存储库(本地),然后点击更新。

这重新索引和搜索依赖关系jar中新添加的类工作和IntelliJ建议的工件和相关的导入。

相关问题