在Maven2的,什么是建立一个战争,并包含在一个单一的POM是WAR的EAR最简单的方法?
-
18-09-2019 - |
题
场合是非常简单的。我有我转换为使用Maven构建一个Java Web应用程序。目前,应用程序是建立与蚂蚁到单个WAR文件,然后将其绑定到EAR用非常简单的application.xml。
maven-war-plugin
和maven-ear-plugin
看起来都相当简单的我,看来他们设置我将不得不考虑上述两个不同的项目,该项目WAR的EAR项目的依赖。这似乎是一点点不方便,特别是因为战争项目的配置文件设置将为每个环境,这似乎像它会迫使我复制该构建每个我试图建立的EAR以及时间调整而改变。
所有这一切都在说:有没有建立战争和包到这个平凡的-EAR简单直接的方式?我想避免维持这些作为两个单独的项目,但将类似地不喜欢使用装配来完成此求助于过于混乱黑客攻击。
解决方案
所有这一切都在说:有没有建立战争和包到这个平凡的-EAR简单直接的方式?我想避免维持这些作为两个单独的项目,但将类似地不喜欢使用装配来完成此求助于过于混乱黑客攻击。
简短的回答:否后,没有简单的Maven的方式做到这一点,因为这将违背一个Maven的规则是“每个项目一个神器”(了解每个项目一个输出哪个是真在99%的情况)。
而实际上,我会强烈建议为不可以去哈克的方式,并使用组件来创建一个EAR忘记。相反,创建两个模块,一个类型war
的包装,其他与取决于战争工件类型ear
的包装,并把他们定义为父母pom.xml
的模块。像这样:
my-project
|-- pom.xml // packaging of type pom and my-war and my-ear as modules
|-- my-war
| `-- pom.xml // packaging of type war
`-- my-ear
`-- pom.xml // packaging of type ear
如果你去Maven的,采用Maven的理念,不反对打,它会为你节省很多的痛苦。严重的是,黑客组件做行家入耳式插件已经做的只是抗干。你最好坚持蚂蚁在这种情况下。
其他提示
我现在知道这是5岁,但它仍然是,当我搜索到来到了第一个答案。另外,虽然“这不是行家办法”对某些人是一个完全合理的答案,其他人可能还是喜欢使用单一的聚甲醛作为OP问,这是真的没有那么复杂。
首先,创建一个标准的战争pom.xml的产生要在耳,包括战争文件。离开包装如战争。
然后使用WAR文件名的占位符编写自己的application.xml(在SRC /主/应用程序或其他地方):
<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中等等)。
接下来,添加一个资源段来替换与战文件名占位符:
<resources>
<resource>
<directory>src/main/application</directory>
<filtering>true</filtering>
<includes>
<include>META-INF/*.xml</include>
</includes>
</resource>
</resources>
最后,添加蚂蚁耳任务内置耳:
<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>
和,就是这样。
在的Maven每一个项目产生aritifact。在你的情况我建议创建两个项目一个是战争,一个耳。如果你需要你的项目的mutltiple版本,你可以achive,使用分类和型材。
这是实施例RichFaces的POM的摘录。
<plugin>
<artifactId>maven-war-plugin</artifactId>
<executions>
<execution>
<id>jee5</id>
<phase>package</phase>
<goals>
<goal>war</goal>
</goals>
<configuration>
<webappDirectory>${project.build.directory}/${project.build.finalName}-jee5</webappDirectory>
<classifier>jee5</classifier>
<packagingExcludes>WEB-INF/lib/jsf-api*,WEB-INF/lib/jsf-impl*,WEB-INF/lib/el-*</packagingExcludes>
<warSourceExcludes>WEB-INF/lib/jsf-api*,WEB-INF/lib/jsf-impl*,WEB-INF/lib/el-*</warSourceExcludes>
</configuration>
</execution>
<execution>
<id>tomcat6</id>
<phase>package</phase>
<goals>
<goal>war</goal>
</goals>
<configuration>
<webappDirectory>${project.build.directory}/${project.build.finalName}-tomcat6</webappDirectory>
<classifier>tomcat6</classifier>
<packagingExcludes>WEB-INF/lib/el-*</packagingExcludes>
<warSourceExcludes>WEB-INF/lib/el-*</warSourceExcludes>
</configuration>
</execution>
</executions>
<configuration>
<webResources>
<resource>
<directory>${basedir}/src/main/java</directory>
<targetPath>/WEB-INF/src</targetPath>
</resource>
</webResources>
</configuration>
</plugin>
在耳朵POM轮廓使用导入适当的分类器所需的依赖性。
<profile>
<id>jee5</id>
<dependencies>
<dependency>
<groupId>org.richfaces.samples</groupId>
<artifactId>richfaces-demo</artifactId>
<version>${richfaces-version}</version>
<classifier>jee5</classifier>
<type>war</type>
<scope>runtime</scope>
</dependency>
</dependencies>
</profile>