我有一个基于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运行单元测试。
答案 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"
);