4

我正在使用 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。

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

4

3 回答 3

3

您应该能够使用 Maven 依赖插件来做到这一点,解压目标: 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>…&lt;/outputDirectory>
           </artifactItem>
         </artifactItems>
      </configuration>
    </execution>
  </executions>
</plugin>
于 2012-04-23T10:37:24.380 回答
2

首先,我建议您检查maven-war-plugin来代替使用maven-assembly- plugin 来完成这项工作。此外,请检查有关dependencySet 的文档,其中包含解包等选项。将模块的打包更改为war 并使其符合maven 约定,并且不要将Maven 用作ant ......目前看起来像它。

于 2012-04-23T10:38:08.343 回答
0

事实证明,程序集描述符(从 2.2-beta-1 版开始)提供了unpackOptions指令,包括<dependencySet>. 正是我需要的。

于 2012-04-23T10:35:27.937 回答