Maven m2eclipse检测工作区中依赖性的变化并自动安装

问题描述:

我在Eclipse中发现了一个令人讨厌的问题,它使用了m2eclipse。Maven m2eclipse检测工作区中依赖性的变化并自动安装

我的工作空间包含2个项目,一个应用程序A和一个库B.应用程序一个POM具有B作为依赖关系,并且一切正常。 (在构建应用程序时找到并使用项目依赖关系)

但是,如果我在项目B中更改了一些代码,并且忘记了mvn:安装它,当我构建应用程序时,它使用库的最后一个内置版本它失去了我最后的变化。

有没有办法强制Maven/M2Eclipse检查依赖项的源代码是否比上一个版本更新,并在安装/部署主应用程序时安装它?

或者,也许我的做法是错误的,或者是我失踪的东西明显?

+0

你能解释一下你的过程吗?你是否正在谈论从本地机器构建和部署应用程序?你在本地机器上运行它吗?你在谈论部署快照还是发布? –

+0

是的,我正在讨论在本地部署快照版本。 –

我不知道如何告诉maven先建立图书馆,然后建立你的项目。您可以将两个maven命令放入脚本并运行脚本。

或者,您可以将两个项目放入maven父项目中,然后构建父项目。这导致所有的子项目也被建立(所以你的情况是库和应用程序)。

+0

我以前想过关于父项目,但我希望我的B库项目独立于可行,因为它是一个标准库,multimodule-projects(父POM)迫使我修改子POM并使用固定路径项目代码。我错了吗?它不是应用程序的一个模块,它使用的是一个库 –

+0

是的,你现在无法真正地使用maven做你想要的东西。你想要的是某种“兄弟项目”设置,maven知道虽然项目是独立的,但你负责两者,并且在构建应用程序时它应该构建库。 我有一个类似的设置,我通过一个bash脚本来建立库,第一个应用程序。 – monkjack

我认为你有几个选择这里

  1. 如果你可以改变Maven项目设置,我会建议你使用Maven multimodule

  2. 方案二可以解决你的问题,但仍涉及手动停止,当你改变你的依赖项目B,这对你的依赖项目在月蚀

  3. 选择库B ==>属性==> Maven ==>在目标调用下的输入框中在项目清理完成后:==>输入:install

  4. 要在Eclipse中将您对Project B中的任何更改部署到maven本地/远程仓库,您必须在eclipse中运行Clean build,这会将最新的库B部署到在Maven仓库
  5. 另外,还要确保您的库B版是快照的发展过程中

你可以告诉m2eclipse的使用解析依赖从工作区,而不是通过正常机制。在你的项目属性(不是工作区属性)中,从Workspace项目中选择Maven-> Resolve dependencies。

Project properties Maven -> Resolve dependencies from Workspace projects

这将意味着,当你改变B和随后建立,变更,应自动拾取。

但是,如果您在Eclipse之外构建,则必须执行正常的mvn安装才能获得正确的依赖关系。

+0

我在两个项目中都启用了该检查,但未收到更改。但是我的属性对话框比你的要简单得多。 ¿也许是因为我正在使用Eclipse(STS)嵌入式Maven? –

+0

这是Eclipse Galileo上的m2eclipse 0.9.8.200905041414版本。你的情况可能稍有不同,但适用相同的规则。你在Project-> Java Build Path,Libraries选项卡中有什么?这是否具有依赖项或存储库版本的工作区版本?如果是后者,请尝试更新Project-> Maven-> Update依赖项。另一个要尝试的事情是在Java Build Path,Order和Export路径中,尝试使用Maven依赖关系检查该框。 –

+0

确保Eclipse工作区中的依赖项版本与项目pom.xml中的版本匹配,并确保不直接从本地Maven存储库引用jar。您可以通过从项目的弹出式菜单中调用Maven/Uupdate Project Configuration操作来简单地修复项目配置。 –

如果你想在本地机器上运行最新的快照,你应该尝试设置直接从Eclipse启动。

除了避免您最初发布的问题外,它还具有其他优点。

  • 无需执行中间构建步骤,它将为您节省大量时间。
  • 您可以启动和停止服务器而无需离开IDE。
  • Eclipse控制台具有您不能从系统控制台获得的额外功能。
  • 您不必修改启动脚本来附加调试器。
+0

是的,我尝试直接从IDE直接启动,但在这种情况下,它更复杂:我称之为应用程序的是Liferay portlet,它作为WAR捆绑在一起,自动部署到本地运行的Liferay Tomcat服务器。部署工作是通过Maven插件完成的。 无论如何,我可以进一步调查如何直接从IDE启动Liferay,这可能是一个很好的解决方案。但它似乎并不容易。 –

+0

一个非常令人困惑的答案。 m2eclipse依赖解析器允许从依赖项目自动获取代码,假设pom在Eclipse工作区中引用正确版本的依赖关系。 –

+0

@Eugene对不起,如果它让你困惑。我认为胡安知道我在说什么。也许你不明白胡安问的是什么。您的评论不会解决他的问题,因为他不是从Eclipse内运行的。 –