【发布时间】:2020-03-21 16:31:50
【问题描述】:
我正在尝试使用我的测试创建一个可执行 jar。我不能使用 maven 来运行测试,所以我正在尝试创建一个执行它们的 jer。
我有一个包含所有测试和所有依赖项的 jar。但是,当我尝试运行时:
java -jar target/tests-0.0.1-SNAPSHOT-spring-boot.jar
我得到-
Exception in thread "main" java.lang.ClassNotFoundException: com.xxx.xx.tests.framework.SDAutomation
at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at org.springframework.boot.loader.LaunchedURLClassLoader.loadClass(LaunchedURLClassLoader.java:93)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
pom.xml 包含以下内容以创建 jar:
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<classifier>spring-boot</classifier>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.6</version>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals> <goal>single</goal> </goals>
<configuration>
<archive>
<manifest>
<mainClass>com.xxx.xx.tests.framework.SDAutomation</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>test-jar</goal>
</goals>
</execution>
</executions>
</plugin>
任何帮助都会很棒。
编辑 1: 通过使用 LauncherFactory 创建一个 main 找到了一个选择 例如:
LauncherDiscoveryRequest request = LauncherDiscoveryRequestBuilder.request()
.selectors(
selectClass(SDAutomation.class)
)
.build();
Launcher launcher = LauncherFactory.create();
// Register a listener of your choice
SummaryGeneratingListener listener = new SummaryGeneratingListener();
launcher.registerTestExecutionListeners(listener);
launcher.execute(request);
TestExecutionSummary summary = listener.getSummary();
【问题讨论】:
-
为什么不能使用 maven 运行测试?
-
需要运行代码的机器没有 maven,也无法访问 repos。
-
啊...你必须在不同的机器上运行你的单元测试/集成测试?这听起来你做错了什么......问题是:构建/运行单元测试和运行应用程序生产之间的区别?你好像弄错了什么?或者我不明白这里的东西......
-
是的。我知道这听起来很奇怪。但我使用 junit 进行 E2E 测试,因为我重用集成测试框架来发送、监控和自动构建测试场景。测试在多个系统上运行,smoe 确实有连接和完整的 maven,有些是隔离设置的,机器上只有 java。我们首先在具有 maven 的系统中运行测试,如果所有测试都通过了,则打包完整的 jar,这样我们就可以使用我们提供的 PIPELINE 来运行测试 JAR。
-
我遇到了类似的问题。 @aviramshterebaum 你找到解决方案了吗?
标签: java maven junit5 spring-boot-test