これはもう5年経っていますが、検索したときに出てきた最初の答えでした. また、「それはMavenの方法ではない」というのは一部の人にとっては完全に合理的な答えですが、OPが尋ねたように単一のpomを使用することを好む人もいるかもしれません。実際にはそれほど複雑ではありません.
まず、標準の war pom.xml を作成して、ear に含める war ファイルを生成します。梱包は戦争のまま。
次に、war ファイル名のプレースホルダーを使用して、独自の application.xml を (src/main/application または任意の場所に) 記述します。
<application xmlns="http://java.sun.com/xml/ns/javaee" ... >
<module>
<web>
<web-uri>${project.build.finalName}.war</web-uri>
<context-root>myapp</context-root>
</web>
</module>
</application>
また、他のサーバー固有の xml ファイル (weblogic-application.xml など) を同じ場所に含めます。
次に、リソース セクションを追加して、プレースホルダーを war ファイル名に置き換えます。
<resources>
<resource>
<directory>src/main/application</directory>
<filtering>true</filtering>
<includes>
<include>META-INF/*.xml</include>
</includes>
</resource>
</resources>
最後に、ant ear タスクを追加して耳を作成します。
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<ear destfile="${project.build.directory}/${project.build.finalName}.ear"
appxml="${project.build.outputDirectory}/META-INF/application.xml">
<fileset dir="${project.build.outputDirectory}" includes="META-INF/*.xml"/>
<fileset dir="${project.build.directory}" includes="${project.build.finalName}.war"/>
</ear>
</tasks>
</configuration>
</execution>
</executions>
</plugin>
以上です。