如何获得兄弟maven项目的jar工件的路径?

时间:2014-05-03 17:03:21

标签: java maven junit processbuilder

我有一个基于java控制台的应用程序,它是作为jar文件创建的,使用:

运行
java -jar commandlineapp.jar

应用程序是使用maven构建的。我有一个junit测试项目,也是一个maven项目,即

parent
+- pom.xml
+- commandlineapp
|  +-pom.xml
+- commandlineapp_test
   +pom.xml

测试项目依赖于commandlineapp,以确保在运行测试之前构建应用程序。

测试项目有一些junit单元测试,使用ProcessBuilder执行commmandlineapp。 E.g。

String jarfile = 
 "C:\\Users\\me\\.m2\\repository\\my\\org\\commandlineapp\\0.0.1-SNAPSHOT\\commandlineapp-.0.1-SNAPSHOT.jar";

ProcessBuilder pb = new ProcessBuilder("java", "-jar", jarFile);

目前,您可以看到我有一个命令行应用jar文件的硬编码路径。

问题:是否有一些元数据可用于查找兄弟项目的jar路径?理想情况下,除了从maven运行它们之外,我仍然希望能够从eclipse运行单元测试。

1 个答案:

答案 0 :(得分:0)

一种方法是使用测试项目中的maven依赖插件将commandlineapp(及其依赖项)复制到测试项目中:

     <plugin>
        <artifactId>maven-dependency-plugin</artifactId>
        <executions>
           <execution>
              <phase>process-test-resources</phase>
              <goals>
                 <goal>unpack-dependencies</goal>
              </goals>
              <configuration>
                 <outputDirectory>${project.build.directory}/lib</outputDirectory>
              </configuration>
           </execution>
        </executions>
     </plugin>

然后,从测试项目中,您可以访问目标文件夹:

File testClassesFolder = 
   new File(CommandLineAppTest.class.getClassLoader().getResource(".").getFile());

我们需要使用类路径创建一个字符串。类路径

String classPath = testClassesFolder.getParent() + File.separator + "lib";

然后将其传递给ProcessBuilder:

ProcessBuilder pb = 
  new ProcessBuilder(
     javaExecutablePath, "-cp", classPath, "my.org.CommandLineApp"
  );