Rachita Nanda
Rachita Nanda

Reputation: 4659

NoClassDefFoundError: org/apache/commons/lang3/StringUtils

I'm trying to run the sample project with this library and I get the following error:

Exception in thread "main" java.lang.NoClassDefFoundError: 

    org/apache/commons/lang3/StringUtils

    at com.github.devnied.emvnfccard.enums.EmvCardScheme.<init>(EmvCardScheme.java:97)
    at com.github.devnied.emvnfccard.enums.EmvCardScheme.<clinit>(EmvCardScheme.java:32)
    at com.github.devnied.emvnfccard.parser.EmvParser.readWithAID(EmvParser.java:277)
    at com.github.devnied.emvnfccard.parser.EmvParser.readEmvCard(EmvParser.java:120)
    at com.github.devnied.emvpcsccard.Main.main(Main.java:64)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.lang3.StringUtils
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    ... 5 more

I've added commons-lang-2.6.jar & commons-lang3-3.1-sources.jar in libs and classpath

Main class:

public static void main(final String[] args) throws CardException {
    Main pcsc = new Main();
    CardTerminal ct = pcsc.selectCardTerminal();
    Card c = null;
    if (ct != null) {
        c = pcsc.establishConnection(ct);
        CardChannel channel = c.getBasicChannel();
        PcscProvider provider = new PcscProvider(channel);
        EmvParser parser = new EmvParser(provider, false);
        parser.readEmvCard();
        c.disconnect(false);
    }
}

I have referred to the following links:

Upvotes: 38

Views: 163765

Answers (6)

ℛɑƒ&#230;Ŀᴿᴹᴿ
ℛɑƒ&#230;Ŀᴿᴹᴿ

Reputation: 5326

If you're using Maven, put this inside your pom.xml file:

Maven Central Repository for Commons Lang:

<dependency>
    <groupId>commons-lang</groupId>
    <artifactId>commons-lang</artifactId>
    <version>2.6</version>
</dependency>

Maven Central Repository for Apache Commons Lang:

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.17</version>
</dependency>

Don't forget to Update Maven Project

mvn clean install -U


If you're using Gradle, put this inside your build.gradle file:

implementation group: 'commons-lang', name: 'commons-lang', version: '2.6'
implementation group: 'org.apache.commons', name: 'commons-lang3', version: '3.17.0'

Gradle (Short)

implementation 'commons-lang:commons-lang:2.6'
implementation 'org.apache.commons:commons-lang3:3.17.0'

Gradle (Kotlin)

implementation("commons-lang:commons-lang:2.6")
implementation("org.apache.commons:commons-lang3:3.17.0")

Don't forget to Update Gradle Project

gradle --refresh-dependencies clean build


Apache Commons Lang ™ Dependency Information

Last Published: 29 August 2024 | Version: 3.17

Apache Maven

<dependency>
  <groupId>org.apache.commons</groupId>
  <artifactId>commons-lang3</artifactId>
  <version>3.17.0</version>
</dependency>

Apache Ivy

<dependency org="org.apache.commons" name="commons-lang3" rev="3.17.0">
  <artifact name="commons-lang3" type="jar" />
</dependency>

Groovy Grape

@Grapes(
@Grab(group='org.apache.commons', module='commons-lang3', version='3.17.0')
)

Gradle/Grails

implementation 'org.apache.commons:commons-lang3:3.17.0'

Scala SBT

libraryDependencies += "org.apache.commons" % "commons-lang3" % "3.17.0"

Leiningen

[org.apache.commons/commons-lang3 "3.17.0"]

Reference:

Maven Central Repository Artifacts:

Upvotes: 19

kiran
kiran

Reputation: 141

Yo adding the below and update maven project worked like a charm:

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.1</version>
</dependency>

Upvotes: 2

smita
smita

Reputation: 43

Adding below worked for me:

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-math3</artifactId>
    <version>3.6.1</version>
</dependency>

Upvotes: 1

Shell_Leko
Shell_Leko

Reputation: 542

I was having this issue in IJ version 2016 after updating it to 2018.3.4 and clicking "Generate sources and update folders for all projects" at Maven options tab the issue went away

IJ Maven tab at IJ 2018.3.4

Upvotes: 0

Mohan Narayanaswamy
Mohan Narayanaswamy

Reputation: 2149

When everything else is correct, rarely jar file gets corrupted. Ensure you don't see error something like below while compiling

[ERROR] error reading 
C:\Users\Mohan\.m2\repository\org\apache\commons\commons-lang3\3.7\commons-lang3-3.7.jar; 
ZipFile invalid LOC header (bad signature)

Upvotes: 0

azurefrog
azurefrog

Reputation: 10945

I have added commons-lang-2.6.jar & commons-lang3-3.1-sources.jar...

Here's your problem: commons-lang-2.6.jar doesn't contain the org.apache.commons.lang3 package, since that's part of version 3, and commons-lang3-3.1-sources.jar contains the source code, not the byte code.

You need to include commons-lang3-3.1.jar instead.

Upvotes: 41

Related Questions