1

我有一个 Maven 构建,我需要在集成测试阶段访问一组特定的文件。这些文件作为 zip 文件从 URL 下载(它们实际上是 Jenkins 工件),并且需要在开始集成测试之前对其进行解压缩。zip 文件每天更新​​不超过一次(当 Jenkins 作业运行时),通常很少。zip 文件相当大(500MB),解压缩需要相当长的时间(约 10 分钟),因此只有在更新 zip 文件后才能进行下载和解压缩。

我第一次尝试这样做是创建一个 Maven 模块,该模块在其预集成测试阶段调用一个 ant 脚本以在本地目录中下载/解压缩,但我无法弄清楚如何正确设置依赖项以便该模块在运行任何其他测试之前执行。

这样做的最简单方法是什么,而无需设置单独的存储库来存储文件?

4

2 回答 2

1

您应该考虑使用Maven 依赖插件,它可以满足您的需求。

首先确保您的 zip 文件可以从您公司的存储库或您自己的本地存储库访问,请看这里。我刚刚通过发出以下命令尝试使用 eclipse zip 文件:

$> mvn install:install-file -Dfile=eclipse-jee-indigo-SR1-win32-x86_64.zip -DgroupId=eclipse -DartifactId=eclipse -Dversion=1.0-SNAPSHOT -Dpackaging=zip

好的,现在您可以从 maven 轻松访问您的 zip 文件。现在将这些行添加到您pom.xml需要解压这些文件的位置(我使用了我新上传的 eclipse 工件,但您可以轻松地替换为您的):

<build>
    <plugins>
        <plugin>
            <artifactId>maven-dependency-plugin</artifactId>
            <executions>
                <execution>
                    <id>unpack</id>
                    <phase>pre-integration-test</phase>
                    <goals>
                        <goal>unpack</goal>
                    </goals>
                    <configuration>
                        <artifactItems>
                            <artifactItem>
                                <groupId>eclipse</groupId>
                                <artifactId>eclipse</artifactId>
                                <version>1.0-SNAPSHOT</version>
                                <type>zip</type>
                            </artifactItem>
                        </artifactItems>
                        <includes>**/*.ini</includes>
                        <outputDirectory>${project.build.directory}</outputDirectory>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

<phase/>指示何时应完成解包。

标签是可选的<includes/>,只是我想展示的东西。这样整个拉链就不会被拆开,大大减少了时间。

现在仅当 zip 已更改且您想要实现的目标时才会执行解包。

于 2012-06-13T08:36:31.880 回答
0

如果您的 ZIP 文件可作为 Maven 依赖项使用,我认为您可以执行以下操作:

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <executions>
      <execution>
        <id>unpacking</id>
        <phase>initialize</phase>
        <goals>
          <goal>unpack</goal>
        </goals>
        <configuration>
          <artifactItems>
            <artifactItem>
              <groupId>org.your.group.to.zip</groupId>
              <artifactId>the-zip</artifactId>
              <version>1-SNAPSHOT</version>
              <type>zip</type>
              <overWrite>false</overWrite>
              <outputDirectory>src/main/resources/something</outputDirectory>
              <excludes>*/somePath/**, */someOtherPath/**, **/pom.xml</excludes>
            </artifactItem>
          </artifactItems>
          <!-- Do not store markers in target so that they survive a mvn clean -->
          <markersDirectory>src/main/resources/markers/</markersDirectory>
        </configuration>
      </execution>
    </executions>
  </plugin>

将标记存储在与目标不同的目录中可以防止它们在 mvn clean 期间被删除,因此整个解包应该只在 ZIP 实际更改时进行。

我不能 100% 确定上面的配置是否完全符合您的需求,但总体思路应该可以进行一些调整。请特别参阅文档和本文档的这一部分。

于 2012-06-13T08:39:22.803 回答