Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何获得兄弟maven项目的jar工件的路径?_Java_Maven_Junit_Processbuilder - Fatal编程技术网

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

Java 如何获得兄弟maven项目的jar工件的路径?,java,maven,junit,processbuilder,Java,Maven,Junit,Processbuilder,我有一个基于java控制台的应用程序,该应用程序创建为jar文件,并通过以下方式运行: java -jar commandlineapp.jar 应用程序是使用maven构建的。我有一个junit测试项目,也是一个maven项目,即 parent +- pom.xml +- commandlineapp | +-pom.xml +- commandlineapp_test +pom.xml 测试项目依赖于commandlineapp,以确保在运行测试之前构建应用程序 测试项目有一些j

我有一个基于java控制台的应用程序,该应用程序创建为jar文件,并通过以下方式运行:

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

parent
+- pom.xml
+- commandlineapp
|  +-pom.xml
+- commandlineapp_test
   +pom.xml
测试项目依赖于commandlineapp,以确保在运行测试之前构建应用程序

测试项目有一些junit单元测试,它们使用ProcessBuilder执行commmandlineapp。例如

目前,您可以看到我有一个指向commandlineapp jar文件的硬编码路径


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

一种方法是在测试项目中使用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>
我们需要用类路径创建一个字符串。类路径

String classPath = testClassesFolder.getParent() + File.separator + "lib";
然后将其传递给ProcessBuilder:

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

JUnit测试用例存在于它们自己的模块中有什么特别的原因吗?我认为这些测试可能会转移到同一个模块中。@Duncan,谢谢你的启发。我现在选择相对文件夹target\classes作为ProcessBuilder的-cp参数,并直接执行该类,而不是使用-jar选项。
String classPath = testClassesFolder.getParent() + File.separator + "lib";
ProcessBuilder pb = 
  new ProcessBuilder(
     javaExecutablePath, "-cp", classPath, "my.org.CommandLineApp"
  );