需要使用Maven

时间:2016-12-12 23:45:01

标签: maven maven-war-plugin

这是我们有时会遇到的Maven头痛的蚂蚁之一。几年前,我重新构建了许多这些项目,将Ivy与Ant结合使用,而当我参与其中时,我做了一些修改,以便转移到Maven(如果我们曾经做过)更简单。那个时候到了。

我现在有了构建工作,几乎完全匹配我们的Ant构建,除了,Maven构建包括在Ant构建中排除的类。这是Ant中的构建:

<target name="package" depends="compile,-ivy.retrieve">
    <war.macro destfile="${target.dir}/${war.name}" webxml="${main.webinf.dir}/web.xml">
        <webinf dir="${main.webinf.dir}"/>
        <lib dir="${lib.dir}"/>
        <classes dir="${main.destdir}">
            <!-- Wait. These weren't here before -->
            <exclude name="**/ejb/**" />
            <exclude name="**/FooJava.java" />
            <exclude name="**/BarJava.java" /> 
        </classes>  
    </war.macro>
</target>

这两个.java文件当然什么都不做。但是,它已经在四个版本中采用了这种方式,显然,它并没有对任何事情产生任何影响。但是,**/ejb/**行似乎是一个问题。

在我的pom.xml中,我有以下内容:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <configuration>
              <!-- None of these three lines work -->
              <packagingExcludes>**/ejb/**</packagingExcludes>
              <packagingExcludes>WEB-INF/classes/com/vegicorp/foo/bar/ejb/**</packagingExcludes>
              <packagingExcludes>${project.build.outputDirectory}/com/vegicorp/foo/bar/ejb/**</packagingExcludes>
            </configuration>
        </plugin>
    </plugins>
</build>

构建工作正常。当我mvn -X时,我可以看到排除,但这三个类文件仍然被复制。我简单地将它们从源代码中删除,如果它们没有被使用,但这取决于开发人员要做的事情。我现在要做的就是获得一个匹配的*.war文件,通过Ant / Ivy版本获得。

根据maven-war-plugin documentation

  

逗号分隔的标记列表,在打包之前从WAR中排除。此选项可用于实现瘦的WAR用例。请注意,您可以使用Java正则表达式引擎使用表达式%regex []包含和排除特定模式。提示:阅读about(?!Pattern)。

那么,我做错了什么?

什么是Effective-Pom? - JimHawkens

<plugins>
  <plugin>
    <artifactId>maven-war-plugin</artifactId>
    <version>3.0.0</version>
    <executions>
      <execution>
        <id>default-war</id>
        <phase>package</phase>
        <goals>
          <goal>war</goal>
        </goals>
        <configuration>
          <packagingExcludes>**/ejb/**</packagingExcludes>
          <archive>
            <manifestSections>
              <manifestSection>
                <name>Build-Information</name>
                <manifestEntries>
                  <Project-Name>${env.JOB_NAME}</Project-Name>
                  <Build-Number>${env.BUILD_NUMBER}</Build-Number>
                  <SVN-Revision>${env.SVN_REVISION}</SVN-Revision>
                </manifestEntries>
              </manifestSection>
              <manifestSection>
                <name>Module-Information</name>
                <manifestEntries>
                  <Group-ID>com.vegicorp</Group-ID>
                  <Artifact-ID>foobar</Artifact-ID>
                  <Version>6.0</Version>
                </manifestEntries>
              </manifestSection>
            </manifestSections>
          </archive>
        </configuration>
      </execution>
    </executions>
    <configuration>
      <packagingExcludes>**/ejb/**</packagingExcludes>
      <archive>
        <manifestSections>
          <manifestSection>
            <name>Build-Information</name>
            <manifestEntries>
              <Project-Name>${env.JOB_NAME}</Project-Name>
              <Build-Number>${env.BUILD_NUMBER}</Build-Number>
              <SVN-Revision>${env.SVN_REVISION}</SVN-Revision>
            </manifestEntries>
          </manifestSection>
          <manifestSection>
            <name>Module-Information</name>
            <manifestEntries>
              <Group-ID>com.vegicorp</Group-ID>
              <Artifact-ID>foobar</Artifact-ID>
              <Version>6.0</Version>
            </manifestEntries>
          </manifestSection>
        </manifestSections>
      </archive>
    </configuration>
  </plugin>

这只显示了我使用的三个<packagingExcludes>中的一个。我也尝试了另外两个。

1 个答案:

答案 0 :(得分:1)

您必须指定插件的版本2.1.1:

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.1.1</version>
            <configuration>
                <packagingExcludes>**/ejb/**</packagingExcludes>                    
                <packagingExcludes>WEB-INF/classes/com/vegicorp/foo/bar/ejb/**</packagingExcludes>
                <packagingExcludes>${project.build.outputDirectory}/com/vegicorp/foo/bar/ejb/**</packagingExcludes>
            </configuration>
        </plugin>

<强>更新
the last version is 3.0.0