Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

I have added the most updated Selenium dependency in my pom.xml

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

I ran mvn clean install inside the directory with my pom.xml and I have also imported the correct classes in my app class as per the Selenium documentation

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

However when i try and run my main method, I get the following error

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

I look in my ~/.m2/repository folder and I don't see an openqa folder but instead I see a seleniumhq folder.

Why didn't maven install the openqa folder, and why does the documentation say to import from org.openqa... when that never exist in my jar repository. I'm very confused, I just want to be able to import selenium Webdriver successfully while having it in my local repository.

like image 671
nivo1000 Avatar asked Dec 14 '17 23:12

nivo1000


2 Answers

NoClassDefFoundError

NoClassDefFoundError in Java occurs when Java Virtual Machine is not able to find a particular class at runtime which was available at compile time. For example, if we have resolved a method call from a class or accessing any static member of a Class and that Class is not available during run-time then JVM will throw NoClassDefFoundError.

The error you are seeing is :

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

This clearly indicates that Selenium is trying to resolve the particular class at runtime from org/openqa/selenium/WebDriver which is no more available.

As you mentioned of looking into ~/.m2/repository folder, the maven folder structure for Selenium v3.7.1 (on Windows) is as follows :

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

So when you see a seleniumhq folder, it is pretty much expected.


What went wrong :

From all the above mentioned points it's clear that the related Class or Methods were resolved from one source Compile Time which was not available during Run Time.

This situation occurs if there are presence of multiple sources to resolve the Classes and Methods through JDK / Maven / Gradle.


Solution :

Here are a few steps to solve NoClassDefFoundError :

  • While using a Build Tool e.g. Maven or Gradle, remove all the External JARs from the Java Build Path. Maven or Gradle will download and resolve all the required dependencies.
  • If using Selenium JARs within a Java Project add only required External JARs within the Java Build Path and remove the unused one.
  • While using Maven, either use <artifactId>selenium-java</artifactId> or <artifactId>selenium-server</artifactId>. Avoid using both at the same time.
  • Remove the unwanted other <dependency> from pom.xml
  • Clean you Project Workspac within your IDE periodically only to build your project with required dependencies.
  • Use CCleane tool to wipe away the OS chores periodically.
  • While you execute a Maven Project always do maven clean, maven install and then maven test.
like image 60
undetected Selenium Avatar answered Oct 07 '22 02:10

undetected Selenium


This is happening because you are selecting jar files under modulepath, you should add them under class path.

like image 36
börübay batır Avatar answered Oct 07 '22 02:10

börübay batır