Maven程序集 - 从存档中提取时从子文件夹中复制文件

时间:2012-06-22 12:50:40

标签: maven maven-assembly-plugin

我对构建基础结构有一个非常具体的要求,即将另一个JAR依赖项的某些内容复制到我的Web应用程序的特定子文件夹中。我们使用的是maven-assembly-plugin,一种自然的方法就是使用<dependencySet><unpackOptions>

代码示例(在汇编描述符中)我看起来如下:

    <dependencySet>
        <unpack>true</unpack>
        <scope>runtime</scope>
        <useProjectArtifact>false</useProjectArtifact>
        <includes>
            <include>my.group:artifact:jar</include>
        </includes>
        <unpackOptions>
            <includes>
                <include>subfolder/config.xml</include>
            </includes>
        </unpackOptions>
        <outputDirectory>WEB-INF/otherfolder</outputDirectory>
    </dependencySet>

问题在于我无法弄清楚如何指定我只想将单个文件artifact.jar/subfolder/config.xml复制到目标WEB-INF/otherfolder。实际结果为WEB-INF/otherfolder/subfolder/config.xml。如您所见,/subfolder被附加到最终路径。有没有办法更改<include>表达式,以便/subfolder不会被追加?

提前致谢!

3 个答案:

答案 0 :(得分:2)

浏览源代码显示,这不可能通过maven-assembly插件实现。它获取在程序集描述符中指定的所有包含,然后将此信息传递给通过多个阶段使用的Plexus归档程序。包含模式也传递给Plexus归档器,然后它显然执行'unpack'保存目录结构。

答案 1 :(得分:1)

你有没有想过maven-dependency-plugin对解压缩档案有很好的支持。

答案 2 :(得分:0)

正如@khmarbaise所指出的,解决方案在于将dependency-plugin与assembly-plugin结合起来:

  • 在包阶段开始时,将所需的依赖项解压缩到某个目标目录
  • 在包(稍后在pom中)使用程序集将该目录中的特定文件提取到工件中