【问题标题】:Maven assembly: copy from specific sub-folder of dependencyMaven 程序集:从依赖项的特定子文件夹复制
【发布时间】:2012-04-23 10:04:27
【问题描述】:

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

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

【问题讨论】:

    标签: maven maven-assembly-plugin


    【解决方案1】:

    您应该能够使用 Maven 依赖插件来执行此操作,并实现 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>
    

    【讨论】:

    • 谢谢,您的评论帮助很大。现在我希望改变我使用 maven-war-plugin 和 maven-dependency-plugin 构建最终 WAR 的方式。我可以有多个 元素引用同一个工件,但具有不同的 吗?
    • 你可以试一试,我猜。如果这不起作用,您仍然可以使用多个执行
    • 说实话,我提供的答案直接回答了原始问题。但是您清楚地展示了如何通过简单而正确的解决方案来实现我的目标。
    【解决方案2】:

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

    【讨论】:

    • 你可能是对的,我应该试试 maven-war-plugin,我会的。结合@nwinkler 提出的建议,我希望我可以实现与使用程序集插件一样的灵活性。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-08
      • 1970-01-01
      • 2020-08-06
      • 2015-03-29
      • 2014-04-25
      • 1970-01-01
      • 2016-02-28
      • 2012-04-22
      相关资源
      最近更新 更多