仅使用测试库创建测试目录

时间:2013-11-18 12:58:03

标签: java maven maven-3 maven-assembly-plugin

我正面临这个问题:

我正在为我们的客户创建装配。在这个程序集中,我基本上需要两个重要的目录:

  • lib/包含所有运行时作用域项目依赖项(包括传递)
  • test/包含所有测试范围依赖项(包括传递),但没有已存在于lib文件夹中的那些

到目前为止,我最终得到了这个汇编文件(我只包括重要部分):

<assembly>
  <id>zip-with-lib-and-test</id>
  <includeBaseDirectory>false</includeBaseDirectory>
  <formats>
    <format>zip</format>
  </formats>
  <dependencySets>
    <dependencySet>
        <outputDirectory>lib</outputDirectory>
        <unpack>false</unpack>
        <useTransitiveDependencies>true</useTransitiveDependencies>
        <useTransitiveFiltering>true</useTransitiveFiltering>
        <useProjectArtifact>true</useProjectArtifact>
    </dependencySet>

    <dependencySet>
        <outputDirectory>test</outputDirectory>
        <unpack>false</unpack>
        <includes>
           <include>group:test-artifact1</include>
           <include>group:test-artifact1</include>
        </includes>
        <useTransitiveDependencies>true</useTransitiveDependencies>
        <scope>test</scope>
    </dependencySet>
  </dependencySets>
</assembly>

有了这个我有测试目录和命名工件,但是这些测试工件没有传递依赖。

我需要像这样进行排除:如果你出现在lib工件中,你将不会参加测试。 我试着用maven-dependency-plugin做这件事但没有运气。

此处不依赖于依赖项的确切列表,因为此程序集将位于多个工件上。

1 个答案:

答案 0 :(得分:0)

程序集插件创建一个zip存档(它也可以创建一个目录作为输出,但它很麻烦),所以我将它留给最后一步。

  1. 为项目的运行时和测试依赖项的位置声明两个属性(例如,runtime.dirtest.dir)。
  2. 使用阶段prepare-package添加两个maven依赖插件执行:一个用于运行时依赖项(应使用includeScope选项),runtime.dir作为输出目录,另一个用于测试依赖项{ {1}}作为输出目录。因此,test.dir中的运行时+编译依赖项和runtime.dir中的运行时+编译+提供+测试(以及系统,如果您碰巧有)。
  3. 现在是时候添加一些groovy脚本了:)你的脚本应该列出test.dir中的所有文件,并且每个文件检查test.dir中是否存在这样的文件;如果是,请从runtime.dir中删除此文件。作为在maven中使用groovy脚本的示例,请参阅my answer here
  4. 使用程序集插件将所有内容打包到zip存档中。