2012-06-13 29 views
1

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

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

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

回答

1

你应该考虑使用Maven Dependency Plugin这将做你想做的。

首先确保您的zip文件可从您公司的存储库或您自己的本地存储库访问,请查看here。我只是试着用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,你需要这些文件解包(我用我的新上传日食神器,但你可以很容易地与你替换):

<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文件发生变化时才会执行解包操作,这就是您想要实现的功能。

+0

我有几个项目需要共享相同的解压缩树,因此在每个项目的“目标”目录下本地解压缩它听起来不是一个好主意。 – JesperE

+0

如果您使用''标签,那么这将是没有问题的。该邮编仍然会在您当地的回购协议中。如果你需要解压全部500MB,那么我同意这是不可行的。 – maba

+0

不幸的是我需要解压所有东西。 – JesperE

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清洁过程中被删除存储的标志,因此整个解包只能在ZIP实际发生变化时才能完成。

我不是100%确定上述配置是否完全符合您的需求,但总体思路应该适当调整。请特别参阅thisthis部分文档。

相关问题