guilerme_coppola84
guilerme_coppola84

Reputation: 197

Importing .jar file in a project whitout IDE and getting ClassNotFoundException

I'm trying to import a .jar file in my project whitout using IDE and the way I'm doing everything works fine until I run the program. I'm getting the following error message when I run it.

So, I created this bar-project folder which I created the .jar file.

bar-project/resources
bar-project/src/com/bar/packmain/Bar.java

Bar.java:

package com.bar.packmain;

public class Bar {
    public Bar() {
        System.out.println("Bar.");
    }
}

At the folder bar-project/src/ I'm compiling like this:

javac -d . com/bar/packmain/Bar.java

To create the jar file I'm using the follwing command: jar -cvf Bar.jar com/bar/packmain/Bar.class

Then I move this .jar to my other project called foo-project.

foo-project/resources
foo-project/library/Bar.jar
foo-project/src/com/foo/packmain/Foo.java

Foo.java: package com.foo.packmain;

import com.bar.packmain.Bar;

public class Foo {

    private Bar bar;

    public Foo() {
        new Bar();
    }

    public static void main(String[] args) {
        new Foo();
    }
}

At the foo-project/src/ folder I'm compiling and running like this:

javac -cp .:../library/Bar.jar -d . com/foo/packmain/Foo.java
java com.foo.packmain.Foo

Exception message:

Exception in thread "main" java.lang.NoClassDefFoundError: com/bar/packmain/Bar
    at com.foo.packmain.Foo.<init>(Foo.java:10)
    at com.foo.packmain.Foo.main(Foo.java:14)
Caused by: java.lang.ClassNotFoundException: com.bar.packmain.Bar
    at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
    ... 2 more

So, my question is how can I fix this?

Upvotes: 1

Views: 114

Answers (1)

vanje
vanje

Reputation: 10383

You compiled the project without an error:

javac -cp .:../library/Bar.jar -d . com/foo/packmain/Foo.java

But your command to run your application doesn't include the Bar.jar in classpath. You have to include your JAR file here, too:

java -cp .:../library/Bar.jar com.foo.packmain.Foo

This is a good way to learn how these things work at the lower level and you get a better understanding what higher levels tools like an IDE or Maven really do.

Upvotes: 1

Related Questions