Eclipse 和 Maven 集成(无 m2e)

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

如果您使用mvn eclipse:eclipse为 EAR 项目生成元数据,它将需要src/main/application/META-INF目录中的application.xml文件。

如果您使用基于 WTP 的应用程序部署描述符编辑器编辑application.xml,它将使用项目的名称(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 使用mvn package创建 ear 时,如果被告知,它将创建版本化的application.xml文件。但是,默认情况下它不会选择生成的(版本化的)文件,它会使用src/main/application/META-INF目录中现有的文件。

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

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

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

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