在maven build参数中指定jar文件

时间:2010-07-04 17:52:34

标签: maven-2 jar command-line-arguments

我们使用maven构建项目。我们尝试在maven构建中运行我们的单元测试用例,为此,我们需要在所有子项目的依赖项中添加DB2驱动程序jar。

我们需要一个解决方案来指定jar文件的绝对路径作为mvn命令行参数,以便在运行单元测试用例时使用它。

这是因为驱动程序jar在我们的app服务器lib文件夹中可用,我们不想在项目的依赖项中指定它。

找不到合适的搜索解决方案,因此请求专家解决方案。

任何解决方法都会有更大的帮助。

提前致谢。

3 个答案:

答案 0 :(得分:1)

通常的方法是向数据库驱动程序添加依赖项并将依赖项限制为测试(测试范围)。因此,该库可用于单元测试,但不会部署和运行。

实际上,我会为这个驱动程序创建一个maven工件(只是一个基本的POM文件),并将它放在构建服务器maven存储库(或nexus,如果你将它用于项目)。

答案 1 :(得分:1)

  

我们使用maven构建项目。我们尝试在maven构建中运行我们的单元测试用例,为此,我们需要在所有子项目的依赖项中添加DB2驱动程序jar。

好吧,maven的方式是将DB2驱动程序声明为父项目中test作用域的依赖项。

  

我们需要一个解决方案来指定jar文件的绝对路径作为mvn命令行参数,以便在运行单元测试用例时使用它。

您可以使用插件配置中的additionalClasspathElement将路径传递给驱动程序:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <configuration>
    <additionalClasspathElements>
      <additionalClasspathElement>path/to/additional/resources</additionalClasspathElement>
    </additionalClasspathElements>
  </configuration>
</plugin>

如果你变量化它,你可以在命令行上传递值。

但说实话,我无法理解为什么不在公司存储库中安装驱动程序并将其声明为依赖项。如果您没有公司存储库,请使用this previous answer中所述的基于文件的存储库(请不要使用system范围不良做法)。没有充分的理由去采取这种黑客行为。

答案 2 :(得分:1)

我正在使用范围设置为'system'的依赖项来引用容器中可用但不在任何maven存储库中的jar。在这种情况下,jar被放在项目中名为'lib'的文件夹中,如下所示:

<dependency>
    <groupId>groupId</groupId>
    <artifactId>artifactId</artifactId>
    <version>version</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/lib/library.jar</systemPath>
</dependency>

groupId,artifactId和version可以设置为你想要的任何值,诀窍是必须使用绝对路径给出系统依赖性,这可以通过使用project.basedir属性来解决。还应该可以将完整路径指定为属性。