а потом

авил самую свежую зависимость Selenium в свой pom.xml

<dependency>
    <groupId>org.seleniumhq.selenium</groupId>
    <artifactId>selenium-java</artifactId>
    <version>3.7.1</version>
</dependency>

Я запустил mvn clean install внутри каталога с моим pom.xml, и я также импортировал правильные классы в своем классе приложения согласно документации Selenium

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

Однако, когда я пытаюсь запустить мой основной метод, я получаю следующую ошибку

Exception in thread "main" java.lang.NoClassDefFoundError: 
org/openqa/selenium/WebDriver

Я просматриваю папку ~ / .m2 / repository и не вижу папку openqa, а вместо этого вижу папку seleniumhq.

Почему maven не установил папку openqa и почему в документации сказано, что она импортируется из org.openqa ... когда ее никогда не было в моем хранилище jar. Я очень сбит с толку, я просто хочу иметь возможность успешно импортировать Selen Webdriver, когда он находится в моем локальном хранилище.

Ответы на вопрос(5)

У вас есть толькоselenium-java зависимость. Для того, чтобы использовать полную функциональность, вам необходимо импортировать все зависимости селена

    <!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-chrome-driver -->
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-chrome-driver</artifactId>
        <version>${selenium.version}</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java -->
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-java</artifactId>
        <version>${selenium.version}</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-server -->
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-server</artifactId>
        <version>${selenium.version}</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-firefox-driver -->
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-firefox-driver</artifactId>
        <version>${selenium.version}</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-api -->
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-api</artifactId>
        <version>${selenium.version}</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-remote-driver -->
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-remote-driver</artifactId>
        <version>${selenium.version}</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-support -->
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-support</artifactId>
        <version>${selenium.version}</version>
    </dependency>
org.openqa.selenium это пакет вselenium-api-{version}.jar подseleniumhq\selenium\selenium-api папка.org.openqa.selenium.firefox это пакет вselenium-firefox-driver-{version}.jar подseleniumhq\selenium\selenium-firefox-driver папка.

это просто имя пакета в папке seleniumhq, вы должны проверить эти jar-файлы.

Сложно сказать, что вызвалоNoClassDefFoundError исключение без структуры проекта и детализации кода. Исключение не совпадает сClassNotFoundException, Может быть, этот ответhttps://stackoverflow.com/a/5756989/5374508 было бы полезно.

Exception in thread "main" java.lang.NoClassDefFoundError: org/openqa/selenium/WebDriver ошибка и хочу поделиться собственным решением:

Когда я получил эту ошибку, я запустил свое приложение в IntelijIDEA, используяJar в редактировании конфигурации (давайте проверим):

И ошибка была:

Exception in thread "main" java.lang.NoClassDefFoundError: org/openqa/selenium/WebDriver
    at project.Main.main(Main.java:45)
Caused by: java.lang.ClassNotFoundException: org.openqa.selenium.WebDriver
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 1 more

Итак, я добавил вместоJar Application ->Application: И здесь тоже изменилось:

Это помогает мне решить ошибку.

Запись: моя зависимость была как

        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>2.53.1</version>
        </dependency>
Что такоеNoClassDefFoundError

NoClassDefFoundError в Java происходит, когдаJava Virtual Machine не может найти определенный класс во время выполнения, который был доступен во время компиляции. Например, если мы разрешили вызов метода из класса или получили доступ к любому статическому члену класса, и этот класс недоступен во время выполнения, тогдаJVM будет бросатьNoClassDefFoundError.

Ошибка, которую вы видите:

Exception in thread "main" java.lang.NoClassDefFoundError: 
org/openqa/selenium/WebDriver

Это ясно указывает на то, чтоSelenium пытается разрешить определенный класс во время выполнения изorg/openqa/selenium/WebDriver который больше не доступен.

Как вы упомянули о изучении~/.m2/repository папка, структура папок maven дляSelenium v3.7.1 (на Windows) выглядит следующим образом:

C:\Users\<user_name>\.m2\repository\org\seleniumhq\selenium\selenium-java\3.7.1

Поэтому, когда вы видитеseleniumhq папка, это в значительной степени ожидается.

Что пошло не так :

Из всех вышеперечисленных пунктов ясно, чтоClass или жеMethods были решены из одного источникаCompile Time который был недоступен во времяRun Time.

Эта ситуация возникает, если есть несколько источников для разрешения классов и методов черезJDK/Maven/Gradle.

Решение :

Вот несколько шагов, чтобы решитьNoClassDefFoundError :

При использовании Build Tool, напримерMaven или жеGradle, Удалить всеExternal JARs изJava Build Path. Maven или жеGradle загрузит и разрешит все необходимые зависимости.При использованииSelenium JARs в пределахJava Project добавить только обязательноExternal JARs в пределахJava Build Path и удалите неиспользованный.При использованииMavenЛибо использовать<artifactId>selenium-java</artifactId> или же<artifactId>selenium-server</artifactId>, Избегайте использования обоих одновременно.Удалить ненужные другие<dependency> изpom.xmlОчистить тебяProject Workspace в вашей IDE периодически только для создания вашего проекта с необходимыми зависимостями.использованиеCCleaner инструмент, чтобы периодически вытирать рутинную работу ОС.Пока вы выполняетеMaven Project всегда делаюmaven clean, maven install а потомmaven test

в Eclipse вы можете принудительно загрузить все зависимости, щелкнув правой кнопкой мыши по своему проекту, перейдя в пункт меню Maven и выбрав «Обновить проект». Затем установите флажок «Принудительное обновление снимков / выпусков».

Если вы открываете из командной строки, выполните:

mvn clean install -U

от вашего пути проекта.

Ваш ответ на вопрос