如何处理 Eclipse 中的 Maven WAR 覆盖?

2022-09-03 06:42:57

我有一个多模块Maven项目,它利用WAR覆盖层(堆叠3深)。在 Maven 中一切都很好,但是我无法从 Eclipse 中启动我的 WAR,因为它抱怨找不到各种文件。

如何配置 Eclipse(和启动器),以便我可以从 Eclipse 运行 WAR,而无需先进行 Maven 安装?我应该补充一点,我的Eclipse WAR项目不是动态的Web项目......这是我需要做的一部分吗?

注意:以下问题涉及该主题,但答案表明您必须始终先进行Maven安装,我知道这不可能是正确的,因为有些人在没有Maven的情况下使用Eclipse。

Maven overlays 和 Eclipse

我也发现了这一点,这让我认为通过香草M2E是不可能的:

http://jira.codehaus.org/browse/MNGECLIPSE-599


答案 1

我能够做到这一点,一切都很好。操作如下:

首先,您需要M2E Eclipse插件,该插件需要让Eclipse自动识别和更新Maven依赖项。它还提供了一个很好的图形POM编辑器。截至2011年底,M2Eclipse项目由Sonatype捐赠给Eclipse基金会,现在简称为M2E。但是,它仍然没有随Eclipse Indigo的Java EE版本一起提供,必须通过其更新站点单独安装。

过去,Eclipse和Maven之间的集成有些麻烦。但是,这种新的基于 Eclipse 的 Maven 集成现在意识到,POM 文件中使用了许多 Maven 插件,并且只有某些插件的某些目标在 IDE 环境中才有意义。此外,那些在 IDE 中运行时有意义的目标可能需要特殊配置。为了正确处理此M2E,现在支持“连接器”的概念

M2E有一长串特殊连接器,允许它在调用各种mojos(Maven插件目标)时做“正确的事情”。要查看 Eclipse 中可用连接器的列表,请转到“首选项”对话框,然后选择 Maven->Dicovery->打开目录”。在项目导入期间,当在 {{pom.xml}} 文件中检测到这些连接器时,应自动安装这些连接器。但是,这需要正确版本的 M2E Maven 导入向导(Indigo 在 SR2 之前没有)。

此外,有时这些连接器是错误的,我们需要使用夜间或测试版更新站点来获取最新的修复程序。如果您使用的是较旧或有缺陷的版本,则需要在升级后删除并重新导入项目。由于这些原因,在我看来,在将项目导入Eclipse之前,所有M2E连接器都应该手动安装。

M2E-WTP 连接器是使 WAR 覆盖在 Eclipse “Servers” 的 Eclipse 启动器中正常工作所需的连接器。该连接器用于将Maven与WTP集成...因此,当 Maven WAR 模块作为项目导入 Eclipse 时,可以处理 WAR 覆盖、servlet 容器设置、Eclipse WTP 配置、根上下文设置以及其他一些事情,这些都有助于使 Eclipse Web 工具“Just Work”。

m2e-wtp 连接器的更新站点是:http://download.jboss.org/jbosstools/updates/m2eclipse-wtp/

添加此 M2E-WTP 站点并安装连接器。但请注意,M2E 和 M2E-WTP 连接器都不会将覆盖 WAR 的依赖项放入最终 WAR 中。您必须通过将所需的依赖项添加到最终的 WAR pom.xml来执行此操作。我不知道为什么这些工具不这样做,但它们没有 - 所以只是克服它。;-)

在这一点上,我还建议通过{{Help->Check for Updates}}进行全面更新。完成此操作后,您应该能够简单地添加一个Eclipse服务器,单击您的项目(不是覆盖项目,而是常规项目),然后选择“在服务器上运行...”。

对 WAR 或覆盖 WAR 所做的更改将自动发布到您的服务器。Javascript更改无需重新启动服务器即可发布...您所要做的就是在浏览器中点击刷新以查看正在运行的新代码。

第二次更新:M2E中有一个错误(https://issues.sonatype.org/browse/MECLIPSEWTP-174),可能导致WEB-INF / lib目录意外丢失其所有JAR文件。当这种情况发生时,您的 servlet 应用程序显然不会启动。解决方法是通过右键单击服务器并选择“清理”来清理服务器。请注意,仅清理工作目录不会恢复这些丢失的 JAR。


答案 2

推荐