Не запускается класс в плагине с main методом в maven перед выполнением mvn test?
Есть требование - перед запуском команды mvn test
, запустить отдельный метод, который подготовит тестовые данные. Этот метод выглядит так:
public class FeatureFilesReader {
public static void main(String[] args) throws IOException {
FeatureFilesReader.getAllFeatureFiles();
}
public static void getAllFeatureFiles() throws IOException {...}
}
Плагин в pom.xml
:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.3</version>
<executions>
<execution>
<id>build-test-environment</id>
<phase>generate-test-resources</phase>
<goals>
<goal>java</goal>
</goals>
</execution>
</executions>
<configuration>
<mainClass>untitled.src.test.java.ru.cucumber.test</mainClass>
</configuration>
</plugin>
Но, при запуске mvn test
получаю ошибку:
java.lang.ClassNotFoundException: untitled.src.test.java.ru.cucumber.test
at java.net.URLClassLoader.findClass (URLClassLoader.java:445)
at java.lang.ClassLoader.loadClass (ClassLoader.java:587)
at java.lang.ClassLoader.loadClass (ClassLoader.java:520)
at org.codehaus.mojo.exec.ExecJavaMojo$1.run (ExecJavaMojo.java:281)
at java.lang.Thread.run (Thread.java:833)
Структура проекта выглядит так:
В чем ошибка? Пробовал перемещать нужный метод в разные директории, по разному писал путь до него (через точку, через слеши, обратные слеши), но ошибка всегда одна и та же
Ответы (1 шт):
смотрим ртфм: https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html#default-lifecycle и видим, что фаза generate-test-resources выполняется до фазы test-compile, таким образом Ваш class файл не может быть найден, потому что исходник (java файл) еще не скомпилировался.
решение 1: перенести из test/java в main/java, что должно сработать, потому что основные исходники компилируются до тестов.
решение 2: перенести этот класс в отдельную библиотеку и использовать как тестовую зависимость
решение 3: отказаться от этого класса в пользу другого решения, например если Вы используете JUnit как платформу для запуска в CucumberRunnerTest то можно загрузить фичи в методе аннотированном как @BeforeAll (см https://junit.org/junit5/docs/current/user-guide/#writing-tests-annotations )