2011-11-27 36 views
0

目前,我建立了一个集成测试套件。基础是一个Maven项目,其中包含几个模块,这些模块相互依赖以建立数据库,将一些数据放入并在其上运行测试,然后将所有内容都包装起来。另外,我有模块,里面有一些实用程序和测试数据。Maven:使用外部库进行集成测试

第一步(上面没有提到)是压缩图像的副本,其中包含大量组成要测试的软件套件的JAR文件。不幸的是,这个软件不是由Maven构建的,而是由Ant构建的,所以我无法在Artifactory或类似的东西中找到这些东西。

我现在的问题是,我用集成测试方法复制和解压缩图像,但我不知道,我如何将JAR文件添加到Maven类路径中。所有其他模块需要编译并运行从ZIP文件中提取的jar文件。

如何将JAR添加到Maven类路径以供以后编译和测试运行? ZIP内容的目标始终是相同的目录。不幸的是,JAR的名称包含版本信息(内部版本号)发生变化。因此,系统和标签的简单使用并不那么容易。像$ {package.path}/lib/* / .jar这样的路径条目会很棒。有没有插件,也许?

或者没有人有更好的想法来建立一个针对预构建JAR的集成测试吗?

+0

你有没有想过在Ant脚本中使用[Ivy](http://ant.apache.org/ivy/)发布到Artifactory? – McDowell

回答

1

从您的所有依赖项创建一个jar,所有内容都在${package.path}/lib/*/.jar

您可以在运行maven之前或作为maven构建的一部分使用ant任务来创建此jar。

要合并罐子,您可以使用Ant Jar Task(请参阅合并存档)。从那里:

<jar destfile="build/main/checksites.jar"> 
    <fileset dir="build/main/classes"/> 
    <restrict> 
    <name name="**/*.class"/> 
    <archives> 
     <zips> 
     <fileset dir="lib/main" includes="**/*.jar"/> 
     </zips> 
    </archives> 
    </restrict> 
</jar> 

这将创建一个jar文件,它将lib/main中所有jar文件中的所有类嵌入。

然后你可以使用系统作用域,这个作用域在maven中是正常的。注意:如果你在maven(通过ant)中创建jar,那么你应该在目标中创建jar,以便正确清理它。

从Maven的使用Ant构建文件,你可以使用maven antrun plugin,类似于:

<plugin> 
    <artifactId>maven-antrun-plugin</artifactId> 

    <executions> 
     <execution> 
      <phase>package</phase> 
      <goals> 
       <goal>run</goal> 
      </goals> 
      <configuration> 
       <tasks> 
        <property name="local.project.artifact.name" value="${project.build.finalName}" /> 
        <property name="local.distribution.artifact.name" value="${local.project.artifact.name}-distribution" /> 
        <property name="local.distribution.artifact.file" value="${project.build.directory}/${local.distribution.artifact.name}.zip" /> 
        <ant antfile="build-deploy.xml" /> 
       </tasks> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

这运行在封装阶段Ant构建文件build-deploy.xml。您的系统所需的修改仅作为读者的练习:-)。

+0

不错的想法,其实。目前情况的问题是,我在JAR文件中会有相互覆盖的文物。这不起作用。另一方面,只要jar文件不存在,Maven就会抱怨并且不会启动。这又是同样的问题:如何在Maven运行期间更改类路径? –

+0

即使您将其作为流程资源或验证阶段的一部分来执行,它也会抱怨吗? –

+0

哦,你是对的。 Maven Eclipse插件正在抱怨,但命令行工具不会直到进程资源。这是一个好兆头。我添加了Ant任务,并且我得到了一个庞大的ZIP文件,我在过程资源阶段将Maven作为依赖关系运行。但是类路径仍然不起作用。我认为有一个失踪或某事。你有好主意吗?编译阶段不成功...... ;-) –

相关问题