NoClassDefFoundError: org/apache/commons/lang/StringUtils

Arun Kumar picture Arun Kumar · Dec 9, 2016 · Viewed 10k times · Source

I am writing map reduce program to compare two files.When I run the program it throws following exception.

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/lang/StringUtils
at org.apache.hadoop.metrics2.lib.MutableMetricsFactory.getName(MutableMetricsFactory.java:119)

MY pom file.

 <dependencies>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-core</artifactId>
<version>0.20.2</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-mapreduce-client-core</artifactId>
<version>0.23.1</version>
</dependency>
<dependency>
    <artifactId>guava</artifactId>
    <groupId>com.google.guava</groupId>
    <type>jar</type>
    <version>15.0</version>
</dependency>
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.2.1</version>
</dependency>
 <dependency>
 <groupId>org.apache.commons</groupId>
 <artifactId>commons-lang3</artifactId>
 <version>3.3</version>
  </dependency>
 <dependency>
  <groupId>commons-logging</groupId>
 <artifactId>commons-logging</artifactId>
 <version>1.1.1</version>
 </dependency>
</dependencies>

Any help will be appreciated.

Answer

Jens picture Jens · Dec 9, 2016

As the error message java.lang.NoClassDefFoundError: org/apache/commons/lang/StringUtils tells you, you need to add commons-lang as a dependency:

<!-- https://mvnrepository.com/artifact/commons-lang/commons-lang -->
<dependency>
    <groupId>commons-lang</groupId>
    <artifactId>commons-lang</artifactId>
    <version>2.3</version>
</dependency>

You have added commons-lang3 which has also a class StringUtils, but with the package name org/apache/commons/lang3/StringUtils.