NoClassDefFoundError в Java: com / google / common / base / Function - PullRequest
55 голосов
/ 27 февраля 2011

Когда я выполняю следующий код:

public static void main(String[] args) {
    try {
        FirefoxDriver driver = new FirefoxDriver();
        driver.get("http:www.yahoo.com");
    } catch (NoClassDefFoundError ex) {
        System.out.println("error: " + ex.getStackTrace());
    }
}

Я сталкиваюсь со следующей ошибкой:

ошибка: [Ljava.lang.StackTraceElement; @ 80f4cb

Исключение в потоке "main" java.lang.NoClassDefFoundError: com / google / common / base / Function


Может ли кто-нибудь помочь мне найти решение или причину для этого?

Ответы [ 15 ]

109 голосов
/ 10 марта 2011

У меня была такая же проблема, и, наконец, я обнаружил, что забыл добавить selenium-server-standalone-version.jar . Я только добавил клиентский jar, selenium-java-version.jar .

Надеюсь, это поможет.

22 голосов
/ 27 февраля 2011

A NoClassDefFoundError выбрасывается, когда JRE не может найти класс. В вашем случае он не может найти класс com.google.common.base.Function, который вы, скорее всего, не добавили в свой путь к классам.

EDIT

После загрузки следующих библиотек:

и разархивировать их и поместить все файлы JAR в папку с именем lib, тестовый класс:

import org.openqa.selenium.firefox.FirefoxDriver;

public class Test {
    public static void main(String[] args) {
        try{
            FirefoxDriver driver = new FirefoxDriver();
            driver.get("http:www.yahoo.com");
        } catch(Exception e){
            e.printStackTrace();
        }
    }
}

бежал без проблем.

Вы можете скомпилировать и запустить класс следующим образом:

# compile and run on Linux & Mac
javac -cp .:lib/* Test.java 
java -cp .:lib/* Test

# compile and run on Windows
javac -cp .;lib/* Test.java 
java -cp .;lib/* Test
8 голосов
/ 01 апреля 2014

Я столкнулся с той же ошибкой, и после исследования я обнаружил, что библиотека selenium-api 2.41.0 требует guava 15.0, но она была переопределена более старой версией, поэтому я объявил guava 15.0 как прямую зависимость, добавив следующую конфигурацию в pom.xml:

<dependency>
        <artifactId>guava</artifactId>
        <groupId>com.google.guava</groupId>
        <type>jar</type>
        <version>15.0</version>
</dependency>
7 голосов
/ 27 февраля 2011

у вас нет "google-collection" библиотеки в вашем classpath .

Существует несколько способов добавить библиотеки вваш classpath , поэтому, пожалуйста, предоставьте больше информации о том, как вы выполняете свою программу.

если из командной строки вы можете добавить библиотеки в classpath с помощью

java -classpath path/lib.jar ...

2 голосов
/ 02 июля 2015

Пожалуйста, включите все jar-файлы автономной папки selenium и папки lib, тогда эта ошибка будет устранена

2 голосов
/ 22 мая 2015

Для меня, в дополнение к выбору jar - selenium-java-2.45.0.jar, мне пришлось выбрать все jar в папке «libs» в корневой папке selenium.

1 голос
/ 09 июня 2017

Я получил ту же ошибку, но она была устранена, если вы добавили библиотеки селена (опять же, если вы этого не сделали), если вы используете INTELIJ

project> projectStructure> Module> +> добавить банки с селеном (как из папки lib, так и из внешних.).

То же самое необходимо сделать и для других IDE, например, eclipse.

1 голос
/ 11 августа 2016

У меня была такая же проблема.Я обнаружил, что забыл добавить файл selenium-2.53.0 / selenium-java-2.53.0-srcs.jar в справочную библиотеку моего проекта.

1 голос
/ 15 сентября 2014

Я столкнулся с той же проблемой и потерпел неудачу даже после установки 'selenium-server-standalone-version.jar', я думаю, что вам нужно установить guava и guava-gwt jar (https://code.google.com/p/guava-libraries/)). Iдобавили все эти фляги, и, наконец, это сработало на моем ПК. Надеюсь, это сработает и для других, сталкивающихся с этой проблемой.

1 голос
/ 27 февраля 2011

Похоже, вы пытаетесь импортировать некоторый код Google:

import com.google.common.base.Function;

И он не находит класс Function.Убедитесь, что все необходимые библиотеки находятся в вашем пути сборки, и что вы правильно ввели пакет.

...