场合是非常简单的。我有我转换为使用Maven构建一个Java Web应用程序。目前,应用程序是建立与蚂蚁到单个WAR文件,然后将其绑定到EAR用非常简单的application.xml。

maven-war-pluginmaven-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>   
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top