如何使用不同的依赖关系构建多个版本的war

时间:2015-09-25 08:12:46

标签: maven war

我面临的情况是我需要使用不同的依赖集构建不同的war,可以在Tomcat 7和WebSphere 8下部署(WebSphere自己提供大量的依赖项),我正在寻找最好的方法。

  • 使用配置文件:这是一个坏主意,因为我无法告诉maven-release运行两次,一次使用tomcat配置文件,一次使用websphere。
  • 使用maven-war插件的不同执行:效果更好,但是我必须使用“packagingExcludes”配置手动排除每个不需要的jar(我不能告诉maven为每次执行使用特定的配置文件或依赖项),那个配置很脆弱
  • 使用war覆盖:也许是一个好主意,但我不喜欢maven忽略原始战争中声明的每个依赖的事实(因此,如果我们不是非常的话,我们可以在第二次战争中拥有相同神器的几个版本小心,配置因此非常脆弱)
  • 使用程序集:似乎比战争叠加更好,仍然需要大量的手动配置
  • 使用不同的模块:我不能重用另一个战争中声明的类,我们的WebSphere中有一个错误,阻止我们在依赖项目中声明所有类(如果没有找到JAX-RS注释)使用它的类在WEB-INF / lib的jar中,只有在WEB-INF / classes中部署为类文件时才有效。

您如何在现实世界的项目中处理这种情况?我错过了什么?

1 个答案:

答案 0 :(得分:0)

装配完成工作:

<assembly
    xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd">
    <id>websphere8</id>
    <includeBaseDirectory>false</includeBaseDirectory>
    <formats>
        <format>war</format>
    </formats>
    <fileSets>
        <fileSet>
            <directory>${project.build.directory}/${project.build.finalName}</directory>
            <outputDirectory></outputDirectory>
             <excludes>
                <exclude>WEB-INF/lib/*.jar</exclude>
             </excludes>
        </fileSet>
    </fileSets>
    <dependencySets>
        <dependencySet>
            <useProjectArtifact>false</useProjectArtifact>
            <outputDirectory>WEB-INF/lib</outputDirectory>
            <useTransitiveFiltering>true</useTransitiveFiltering>
            <excludes>
                <exclude>javax.ws.rs:jsr311-api:*</exclude>
                <exclude>org.jboss.spec.javax.transaction:jboss-transaction-api_1.1_spec:*</exclude>
                <exclude>xml-apis:xml-apis:*</exclude>
                <exclude>xerces:xercesImpl:*</exclude>
                <exclude>org.hibernate.javax.persistence:hibernate-jpa-2.0-api:*</exclude>
                <exclude>org.ow2.jotm:jotm-core:*</exclude>
                <exclude>org.glassfish.hk2.external:javax.inject:*</exclude>
            </excludes>
        </dependencySet>
    </dependencySets>
</assembly>