Maven程序集:从特定的依赖子文件夹复制

时间:2012-04-23 10:04:27

标签: maven maven-assembly-plugin

我正在使用Maven程序集插件来构建我们产品的WAR(以前由Ant完成)。由于Apache Ant有很多剩余部分,因此有一个特定的要求可以简化构建过程:将特定的依赖子文件夹(例如,jar或war资源)复制到特定的目标子文件夹。

到目前为止,我了解到汇编描述符允许指定<outputDirectory>,但是有没有机会指定<sourceDirectory>?例如,我想将此规则应用于单个WAR或JAR类型依赖项。

考虑这个汇编描述符片段的例子(不是100%准确):

    <dependencySet>
        <unpack>true</unpack>
        <scope>runtime</scope>
        <useProjectArtifact>false</useProjectArtifact>
        <includes>
            <include>my-specific-dependency:war</include>
        </includes>
        <outputDirectory>WEB-INF/myresources</outputDirectory>
    </dependencySet>

我想说我想从my-specific-dependency中复制一些文件夹:war到WEB-INF / myresources。

编辑注意:我知道这不是一个非常正确的要求,因为我们不应该知道工件内部是什么,正确的方法是声明将整个工件提取到目标目录(整洁的声明性方法)。

3 个答案:

答案 0 :(得分:3)

您应该可以使用Maven Dependency插件执行此操作,并使用 unpack 目标: http://maven.apache.org/plugins/maven-dependency-plugin/unpack-mojo.html

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-dependency-plugin</artifactId>
  <executions>
    <execution>
      <id>unpack-database-scripts</id>
      <phase>compile</phase>
      <goals>
        <goal>unpack</goal>
      </goals>
      <configuration>
          <artifactItems>
           <artifactItem>
             <groupId>myGroup</groupId>
             <artifactId>myArtifact</artifactId>
             <version>1.0</version>
             <type>war</type>
             <overWrite>true</overWrite>
             <includes>...</includes>
             <outputDirectory>…</outputDirectory>
           </artifactItem>
         </artifactItems>
      </configuration>
    </execution>
  </executions>
</plugin>

答案 1 :(得分:2)

首先,我建议您使用maven-war-plugin检查maven-assembly-plugin以完成该工作。此外,检查documentation有关dependencySet的内容,其中包含解压缩等选项。将模块的包装更改为war并使其适合maven约定,不要将Maven用作ant ...目前看起来像它

答案 2 :(得分:0)

事实证明,汇编描述符(因为版本2.2-beta-1)提供了unpackOptions指令,包括<dependencySet>。正是我需要的。