Не запускается класс в плагине с 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 шт):

Автор решения: Ramiz

смотрим ртфм: 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 )

→ Ссылка