NoClassDefFoundError lors de l'exécution d'un jar valide (compilé avec des dépendances) malgré les dépendances communes-httpclient et httpcomponents sur pom
Je suis en train d'automatiser un simple utilisateur de la loi en utilisant selenium webdriver de méthode main (ne relevant pas de test de portée)
Lorsque vous exécutez le code suivant à partir du compilateur, il fonctionne!
Mais lors de l'exécution du pot sur plusieurs cas - face au problème suivant
(Je suis en cours d'exécution sur Ubuntu, à l'aide de java 7)
"Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/http/conn/HttpClientConnectionManager"
@Log
public class MainProgram {
public WebDriver driver = new FirefoxDriver();
public static void main(String args[]) {
// Injector injector = Guice.createInjector(new WebModule());
System.out.println("Browser will soon be opened");
MainProgram mainProgram = new MainProgram();
mainProgram.run();
}
public void run(){
driver.get("http://www.google.co.il");
WebElement lookFor = driver.findElement(By.name("q"));
if(!lookFor.isDisplayed()){
driver.close();
log.log(Level.WARNING,"Failed!");
};
driver.close();
}
}
WebDriver dépendances sur pom:
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-server</artifactId>
<version>2.42.2</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>2.42.2</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-api</artifactId>
<version>2.42.2</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-firefox-driver</artifactId>
<version>2.42.2</version>
</dependency>
Case A
when removed -commons-httpclient - received: HttpClientConnectionManager as follows:
<!--
<dependency>
<groupId>commons-httpclient</groupId>
<artifactId>commons-httpclient</artifactId>
<version>3.1</version>
</dependency>-->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.3.4</version>
<!-- <scope>test</scope>-->
</dependency>
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/http/conn/HttpClientConnectionManager
at org.openqa.selenium.remote.HttpCommandExecutor.<init>(HttpCommandExecutor.java:99)
at org.openqa.selenium.remote.HttpCommandExecutor.<init>(HttpCommandExecutor.java:82)
at org.openqa.selenium.firefox.internal.NewProfileExtensionConnection.start(NewProfileExtensionConnection.java:77)
-------------------------------------------------------------------------------------------------------------------------------------------
Case B
removed both commons-httpclient + httpcomponents received HttpClientConnectionManager:
<!-- <!–
<dependency>
<groupId>commons-httpclient</groupId>
<artifactId>commons-httpclient</artifactId>
<version>3.1</version>
</dependency>–>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.3.4</version>
<!– <scope>test</scope>–>
</dependency>-->
liron@liron-Latitude-3330:~$ java -jar automatic-tests-4.0-SNAPSHOT-jar-with-dependencies.jar
Try
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/http/conn/HttpClientConnectionManager
at org.openqa.selenium.remote.HttpCommandExecutor.<init>(HttpCommandExecutor.java:99)
at org.openqa.selenium.remote.HttpCommandExecutor.<init>(HttpCommandExecutor.java:82)
---------------------------------------------------------------------------------------------------------------------------------------------
Case C
when both were added to pom - same HttpClientConnectionManager
liron@liron-Latitude-3330:~$ java -jar automatic-tests-4.0-SNAPSHOT-jar-with-dependencies.jar
Browser will soon be opened
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/http/conn/HttpClientConnectionManager
at org.openqa.selenium.remote.HttpCommandExecutor.<init>(HttpCommandExecutor.java:99)
at org.openqa.selenium.remote.HttpCommandExecutor.<init>(HttpCommandExecutor.java:82)
at org.openqa.selenium.firefox.internal.NewProfileExtensionConnection.start(NewProfileExtensionConnection.java:77)
----------------------------------------------------------------------------------------------------------------------------------------------
source d'informationauteur lironn
Vous devez vous connecter pour publier un commentaire.
J'ai rencontré ce même problème hier soir avec mon WebDriver projet, et après un peu de débogage, découvert qu'il manquait à la suite de la dépendance. Après l'ajout d'eux, je ne rencontre pas de cette exception à nouveau.
Vous devriez seulement besoin
selenium-java
dans votre pom dépendances. Voir la ce graphique @ Sélénium HQ qui explique la façon dont les pièces de Sélénium sont liées. De plus, le Sélénium lui-même a des dépendances surhttpclient
vous ne devriez pas avoir besoin de définir explicitement. Si vous avez un besoin légitime pour les personnes, les choses vont s'entrechoquer et vous aurez besoin pour nettoyer avecexclusions
.Après le nettoyage de votre pom, vous pouvez exécuter
mvn dependency:tree
pour voir ce qui se passe dans votre projet.L'ajout de nouvelles de google goyave aide dans mon cas:
C'est parce que d'autres dépendances pouvez télécharger ancien goyave 18 version.
Et bien sûr, comme testphreak dit: org.apache.httpcomponents