我正在尝试对使用Java开发的组件进行一些端到端测试。因此,test
中的这些类不是单元测试,我只想将它们作为普通的Java类运行。
我的源在src\main\java
文件夹中,而测试则在src\test\java
内部。该测试有两个Java类,一个是util类,另一个是在main
中扩展一个类,并且还具有main方法。 最终,我需要运行此主要方法。
我创建了两个pom文件,一个用于主项目,一个用于运行测试。测试pom文件中的唯一区别是mainClass
属性。
当我在src\main\java
中拥有测试类时,maven对其进行了编译,并且我能够毫无问题地运行它们。
由于在src\main\java
文件夹中进行测试是一种不好的做法,因此我想将其移至src\test\java
文件夹中。但这不起作用。它编译项目,但不编译测试类(显然是因为现在它不在src\main\java
文件夹中)。因此,我在测试pom文件的类路径作用域中添加了test
,如下所示。
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<configuration>
<mainClass>com.my.company.project.MyTestClass</mainClass>
<classpathScope>test</classpathScope>
</configuration>
</plugin>
但这不起作用。
因此,我尝试了maven本身提供的solution,但这是相同的。它以清单文件中的主类创建我的测试类的jar文件。但是jar文件中没有这样的类,也没有main
中的类。运行jar文件时出现以下错误。
Could not find or load main class com.my.company.project.MyTestClass
我的最终目标是能够使用maven编译并运行我的Test类(以测试主类)。
您能建议我实现这一目标的方法吗?
编辑:
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.my.company</groupId>
<artifactId>my-artifact</artifactId>
<version>1.0.0</version>
<packaging>jar</packaging>
<properties>
...
</properties>
<developers>
...
</developers>
<dependencies>
...
</dependencies>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.6.0</version>
</plugin>
...
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<configuration>
<mainClass>com.my.company.project.MyClass</mainClass>
<classpathScope>test</classpathScope>
</configuration>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>com.my.company.project.MyClass</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<appendAssemblyId>false</appendAssemblyId>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<compilerArgs>
<arg>-verbose</arg>
<arg>-Xlint:all,-options,-path</arg>
</compilerArgs>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.1.1</version>
<executions>
<execution>
<goals>
<goal>test-jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
编辑2:
根据@notionquest的评论,我更新了POM文件。现在测试类正在编译,但是在jar文件中不可用。因此,它仍然给我错误:
Error: Could not find or load main class com.trivago.visual.debezium.test.ChangeDataCaptureSenderTest