Исключение ClassNotFoundException в cucumber framework

#java #maven #pom.xml #cucumber-java #maven-exec-plugin

Вопрос:

Я использую Cucumber framework для тестирования мобильных приложений. В pom.xml , я дал этот приведенный ниже плагин для запуска TestClass.java — который содержит код для загрузки последней APK-версии приложения. Основной метод присутствует внутри этого тестового класса. Мне нужно, чтобы это запускалось перед фактическим выполнением теста. Итак, я использовал плагин exec. Я получаю эту ошибку, если я запускаю с pom.xml —> чистый тест mvn. ClassNotFoundExpection всегда выдается с pom.xml , но индивидуальный класс проходит отлично.

pom.xml:

 <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <version>3.0.0</version>
       <executions>
    <execution>
            <id>installAPK</id>
            <phase>generate-test-sources</phase>
            <goals>
            <goal>java</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <includePluginDependencies>true</includePluginDependencies>
        <mainClass>org.com.package1.TestClass</mainClass>
    </configuration>
</plugin>
 

Ошибка консоли:

 java.lang.ClassNotFoundException: org.com.package1.TestClass
    at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
    at org.codehaus.mojo.exec.ExecJavaMojo$1.run(ExecJavaMojo.java:246)
    at java.lang.Thread.run(Thread.java:748)
 

Я также попытался изменить фазу после тестовой компиляции. Тем не менее, я получаю ту же ошибку. Кто-нибудь, пожалуйста, помогите.

Ответ №1:

Согласно документации exec-maven-plugin, область зависимостей по умолчанию для выполнения равна runtime . Пожалуйста, измените его на test со следующей конфигурацией, если TestClass он является частью тестовых источников.

 <plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>exec-maven-plugin</artifactId>
  <version>3.0.0</version>
  <executions>
    ...
  </executions>
  <configuration>
    ...
    <classpathScope>test</classpathScope>
  </configuration>
</plugin>
 

Комментарии:

1. Просто запрос. Если у меня есть тестовый класс в src / main / java без добавления этого <classpathScope>, будет ли это работать?

2. Да, область зависимостей по умолчанию для выполнения равна runtime , которая включает основные классы и зависимости от компиляции / времени выполнения.