Eclipse 和 Maven 集成(无 m2e)

本页描述了如何在没有 m2e支持的情况下将 EAR 项目集成到 Eclipse 或基于 Eclipse 的 IDE 中。然而,通常使用 m2e(和 m2e-wtp)应该是集成 Maven 和 Eclipse 的首选方式。但在极少数情况下,这可能是不可能的。

如果您曾经mvn eclipse:eclipse为一个 EAR 项目生成元数据,它会希望该application.xml文件位于该src/main/application/META-INF目录中。

如果您application.xml使用基于 WTP 的 Application Deployment Descriptor 编辑器进行编辑,它将使用项目的名称(Web、EJB 等)作为模块的名称。这是一个例子:

<?xml version="1.0" encoding="UTF-8"?>
<application xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/application_1_4.xsd" version="1.4">
  <display-name>FireDragon</display-name>
  <module>
    <web>
      <web-uri>FireDragonWeb.war</web-uri>
      <context-root>firedragon</context-root>
    </web>
  </module>
</application>

显然,这并没有应用典型的基于 Maven 的版本命名约定。这允许我们使用测试环境在 Eclipse 内部运行应用程序。当使用 Maven 创建 ear时,如果被告知mvn package,它将创建版本化文件。application.xml但是,默认情况下,它不会选择生成的(版本化的)文件,而是使用目录中现有的src/main/application/META-INF文件。

解决此冲突的解决方案是让 Maven 生成application.xml并使用生成的,而不是现有的。

这可以通过以下两个指令来实现:

  <generateApplicationXml>true</generateApplicationXml>
  <applicationXml>${project.build.directory}/application.xml</applicationXml>

第一行告诉 Maven 生成一个新application.xml文件,默认在目标目录中。第二行告诉 Maven 使用它。