Reputation: 197
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
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