Я пытаюсь провести сквозной тест для компонента, который я разрабатываю с использованием Java. Итак, эти классы в test
не являются модульными тестами, и я хочу запускать их только как обычный класс Java.
Мои источники находятся в папке src\main\java
, а тесты - в src\test\java
. В тесте есть два Java-класса, один является утилитарным классом, а другой расширяет класс в main
, а также имеет метод main. В конечном итоге мне нужно запустить этот основной метод .
Я создал два файла pom, один для основного проекта и один для запуска теста. Единственным отличием в файле тестового pom было свойство mainClass
.
Когда у меня были тестовые классы внутри src\main\java
, maven компилирует их и я смог запустить их без проблем .
Поскольку тестирование внутри папки src\main\java
является плохой практикой, я хотел переместить ее в папку src\test\java
. Но тогда это не работает. Он компилирует проект, но не компилирует тестовые классы (очевидно, потому что теперь он не внутри папки src\main\java
). Поэтому я добавил test
в область classpath в файле pom теста, как показано ниже.
<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, но оно то же самое. Он создает файл jar с моим тестовым классом в качестве основного класса в файле манифеста. Но в jar-файле нет ни одного такого класса, ни классов из main
. И я получаю следующую ошибку при запуске файла JAR.
Could not find or load main class com.my.company.project.MyTestClass
Моя конечная цель - иметь возможность скомпилировать и запустить мой тестовый класс (для тестирования основного класса), используя maven.
Можете ли вы предложить мне способ достижения этого?
EDIT:
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