Исключение в потоке "main" java .lang.NoClassDefFoundError: gherkin / formatter / Formatter Cucumber 5.2.0 - PullRequest
3 голосов
/ 12 февраля 2020

Я пытаюсь настроить мой первый опыт работы с огурцом в Eclipse. Я настраиваю базовый c файл функций в папке «Функции» так, как предлагалось в учебном видео, но, пытаясь выполнить функцию огурца, я получаю следующее:

Exception in thread "main" java.lang.NoClassDefFoundError: gherkin/formatter/Formatter
    at java.base/java.lang.ClassLoader.defineClass1(Native Method)
    at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1016)
    at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:151)
    at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:821)
    at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:719)
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:642)
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:600)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
    at cucumber.runtime.formatter.PluginFactory$1.<init>(PluginFactory.java:53)
    at cucumber.runtime.formatter.PluginFactory.<clinit>(PluginFactory.java:52)
    at cucumber.runtime.RuntimeOptions.<init>(RuntimeOptions.java:70)
    at cucumber.api.cli.Main.run(Main.java:31)
    at cucumber.api.cli.Main.main(Main.java:18)
Caused by: java.lang.ClassNotFoundException: gherkin.formatter.Formatter
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:602)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
    ... 14 more

Я выполнил все шаги перечисленные в учебном видео, которое я смотрю, но безуспешно. У меня установлено следующее:

Eclipse 2019-12, Java SE 13

Я скачал и установил все файлы JAR локально. Я читал, что существует вероятность возникновения конфликтов с большим количеством jar-файлов, которые могут мешать друг другу, поэтому я обновил все мои jar-файлы до последних версий. Все еще не помогает. Затем я убрал установленные банки по одному и попытался запустить их снова, пока не приступил к самым необходимым. Проблема все еще сохраняется.

Вот фрагмент моей настройки:

Снимок моего проекта в Eclipse

Я открыт для любой помощи что другие могут предоставить

1 Ответ

1 голос
/ 14 февраля 2020

Я скачал и установил все файлы JAR локально. Я читал, что существует вероятность возникновения конфликтов с большим количеством jar-файлов, которые могут мешать друг другу, поэтому я обновил все мои jar-файлы до последних версий. Все еще не помогает. Затем я убрал установленные банки по одному и попытался запустить их снова, пока не приступил к самым необходимым. Проблема все еще сохраняется.

Если вы будете следовать 10-минутному учебнику , вы получите введение, в котором используется управление зависимостями Maven.

В дополнение к этому учебному пособию Я настоятельно рекомендую вам уделить время изучению Maven или Gradle вместе с Cucumber. Помимо прочего, эти инструменты автоматизируют ваше управление зависимостями, и это может значительно облегчить вашу жизнь.

Например:

Если вы хотите использовать Cucumber с JUnit 4 и определениями шагов на основе аннотаций, вы бы объявите этот минимальный набор зависимостей в файле Maven pom.xml.

    <properties>
        <cucumber.version>5.2.0</cucumber.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>io.cucumber</groupId>
            <artifactId>cucumber-java</artifactId>
            <version>${cucumber.version}</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>io.cucumber</groupId>
            <artifactId>cucumber-junit</artifactId>
            <version>${cucumber.version}</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

Сказав Maven, каковы ваши зависимости, Maven может вычислить ваши переходные зависимости, то есть: зависимости ваших зависимостей.

Это имеет много преимуществ. Одним из примеров будет использование команды mvn dependency:tree для отображения всех зависимостей. Это намного быстрее и намного менее подвержено ошибкам, чем загрузка файлов JAR вручную и в надежде, что у вас есть нужные файлы.

$ mvn dependency:tree
[INFO] Scanning for projects...
[INFO] 
[INFO] ------------------< cucumber:cucumber-java-skeleton >-------------------
[INFO] Building Cucumber-Java Skeleton 0.0.1
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ cucumber-java-skeleton ---
[INFO] cucumber:cucumber-java-skeleton:jar:0.0.1
[INFO] +- io.cucumber:cucumber-java:jar:5.2.0:test
[INFO] |  +- io.cucumber:cucumber-core:jar:5.2.0:test
[INFO] |  |  +- io.cucumber:cucumber-gherkin:jar:5.2.0:test
[INFO] |  |  +- io.cucumber:cucumber-gherkin-vintage:jar:5.2.0:test
[INFO] |  |  +- io.cucumber:tag-expressions:jar:2.0.4:test
[INFO] |  |  +- io.cucumber:cucumber-expressions:jar:8.3.1:test
[INFO] |  |  +- io.cucumber:datatable:jar:3.3.0:test
[INFO] |  |  +- io.cucumber:cucumber-plugin:jar:5.2.0:test
[INFO] |  |  \- io.cucumber:docstring:jar:5.2.0:test
[INFO] |  \- org.apiguardian:apiguardian-api:jar:1.1.0:test
[INFO] +- io.cucumber:cucumber-junit:jar:5.2.0:test
[INFO] \- junit:junit:jar:4.13:test
[INFO]    \- org.hamcrest:hamcrest-core:jar:1.3:test
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  0.781 s
[INFO] Finished at: 2020-02-10T23:00:14+01:00
[INFO] ------------------------------------------------------------------------
...