58 votes

NoClassDefFoundError en Java : com/google/common/base/Function

Lorsque j'exécute le code suivant :

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());
    }
}

Je suis confronté à l'erreur suivante :

erreur : [Ljava.lang.StackTraceElement;@80f4cb

Exception dans le thread "main" java.lang.NoClassDefFoundError : com/google/common/base/Function

Quelqu'un peut-il m'aider à trouver la solution ou la raison de ce problème ?

0 votes

Essayez d'utiliser le ex.printStackTrace() método.

112voto

MaGonglei Points 541

J'ai eu le même problème, et j'ai finalement découvert que j'avais oublié d'ajouter l'élément selenium-server-standalone-version.jar . J'avais seulement ajouté le jar client, selenium-java-version.jar .

J'espère que cela vous aidera.

3 votes

J'avais le même problème, votre solution l'a réglé. Merci.

3 votes

Pourquoi le jar autonome est-il nécessaire ? Je ne l'exécute que sur une seule machine ?

0 votes

Et les versions des deux pots devraient être mieux assorties.

23voto

Bart Kiers Points 79069

A NoClassDefFoundError est lancé lorsque le JRE ne peut pas trouver une classe. Dans votre cas, il ne peut pas trouver la classe com.google.common.base.Function que vous n'avez très probablement pas ajouté à votre classpath.

EDIT

Après avoir téléchargé les bibliothèques suivantes :

et les dézipper et mettre tous les fichiers JAR dans un dossier appelé lib la classe de test :

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();
        }
    }
}

a fonctionné sans aucun problème.

Vous pouvez compiler et exécuter la classe comme suit :

\# 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

3 votes

C'est la réponse la plus générale si l'on veut exécuter un test Selenium pour la première fois, car toutes les bibliothèques mentionnées sont nécessaires.

0 votes

@Bart Kiers Je suis en train de courir javac -classpath C:\selenium-2.42.2\selenium-server-standalone-2.42.2.jar; C:\selenium-2.42.2\selenium-java-2.42.2.jar Test.java y luego java Test mais il revient : Exception in thread "main" java.lang.NoClassDefFoundError: org/openqa/selenium/firefox/FirefoxDriver at Test.main(Test.java:7) Caused by: java.lang.ClassNotFoundException: org.openqa.selenium.firefox.Firefox Je suis avec cela quelques heures ; Des idées s'il vous plaît ? Merci ! (Win7)

0 votes

@Bart Kiers Merci pour votre réponse. Je change la pathclass en javac -classpath "C:\selenium-2.42.2\selenium-server-standalone-2.42.2.jar;C:‌​\selenium-2.42.2\sel‌​enium-java-2.42.2.ja‌​r;C:\selenium-2.42.2‌​\selenium-firefox-dr‌​iver-2.42.2.jar" Test.java Mais il renvoie la même erreur. Je télécharge firefox-driver de ce enlace . De nouvelles idées :) ?

9voto

ThoQ Luong Points 416

J'ai rencontré la même erreur et après investigation, j'ai découvert que la bibliothèque selenium-api 2.41.0 nécessite guava 15.0 mais qu'elle était remplacée par une version plus ancienne. J'ai donc déclaré guava 15.0 comme une dépendance directe en ajoutant la configuration suivante dans pom.xml :

<dependency>
        <artifactId>guava</artifactId>
        <groupId>com.google.guava</groupId>
        <type>jar</type>
        <version>15.0</version>
</dependency>

1 votes

C'est l'étape qui a fonctionné pour moi aussi. Je n'ai rien eu à faire d'autre

7voto

pstanton Points 8807

Vous n'avez pas le "google-collections" sur votre Chemin de classe .

Il existe un certain nombre de les moyens d'ajouter des bibliothèques à votre classpath Veuillez donc fournir plus d'informations sur la façon dont vous exécutez votre programme.

si à partir de la ligne de commande, vous pouvez ajouter des bibliothèques au classpath via

java -classpath path/lib.jar ...

2 votes

Google Collections est en quelque sorte déprécié maintenant, remplacé par le projet Guava ( code.google.com/p/guava-libraries )

1 votes

Je ne suis pas celui qui y fait référence ;)

1voto

donnyton Points 1886

Il semble que vous essayez d'importer du code google :

import com.google.common.base.Function;

Et il ne s'agit pas de trouver la fonction de classe. Vérifiez que toutes les bibliothèques requises se trouvent dans votre chemin de construction et que vous avez tapé le paquet correctement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X