views:

83

answers:

3

Hi,

We have our project build using maven. We try to run our unit test cases in maven build itself and for doing that we need to add DB2 driver jar in the dependency of all the sub projects.

Instead of doing that, we need a solution to specify the absolute path of the jar file as a mvn command line argument to use it in the running of unit test cases.

This is because the driver jar is available in our app server lib folder and we don't want to specify it in the dependencies of our projects.

Couldn't find a suitable solution googling it, hence requesting for an expert solution here.

Any workaround would be of greater help.

Thanks in advance.

+1  A: 

The usual way would be to add a dependency to the database driver and limit the dependency to testing (test scope). So the library is available for unit tests but will not deployed and jar'ed.

Practically spoken, I'd create a maven artifact for this driver (just a basic POM file) and place it on the build servers maven repository (or the nexus, if you use it for the projects).

Andreas_D
+1  A: 

We have our project build using maven. We try to run our unit test cases in maven build itself and for doing that we need to add DB2 driver jar in the dependency of all the sub projects.

Well, the maven way would be to declare the DB2 driver as dependency with a test scope in a parent project.

Instead of doing that, we need a solution to specify the absolute path of the jar file as a mvn command line argument to use it in the running of unit test cases.

You could use the additionalClasspathElement in the plugin configuration to pass the path to the driver:

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

If you variablelize it, you could pass the value on the command line.

But to be honest, I can't understand why you don't install the driver in a corporate repository and declare it as dependency. And if you don't have a corporate repository, use a file based repo as described in this previous answer (please, don't use the system scope bad practice). There is no good reason to go the hacky way.

Pascal Thivent
Thanks for your suggestion. I have added additionalClasspathElement with absolute path (c:/lib), where I have the jars for db2driver. It is not working, am i missing something.
techastute
+1  A: 

I'm using a dependency with scope set to 'system' to reference a jar that is available in the container but not in any maven repository. In this case the jar is put in a folder named 'lib' in the project like this, :

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

The groupId, artifactId and version can be set to any value you want, the trick was that system dependencies have to be given with an absolute path, which is worked around by using the project.basedir property. It should also be possible to specify the complete path as a property.

Jörn Horstmann