在没有 IDE 的项目中导入 .jar 文件并获取 ClassNotFoundException
Importing .jar file in a project whitout IDE and getting ClassNotFoundException
我正在尝试使用 IDE 在我的项目中导入一个 .jar 文件,在我 运行 程序之前,我所做的一切工作正常。当我 运行 它时,我收到以下错误消息。
所以,我创建了这个 bar-project 文件夹,我创建了 .jar 文件。
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.");
}
}
在文件夹 bar-project/src/ 我是这样编译的:
javac -d . com/bar/packmain/Bar.java
要创建 jar 文件,我使用以下命令:
jar -cvf Bar.jar com/bar/packmain/Bar.class
然后我将这个 .jar 移动到我的另一个名为 foo-project 的项目中。
foo-project/resources
foo-project/library/Bar.jar
foo-project/src/com/foo/packmain/Foo.java
Foo.java:
包裹 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();
}
}
在 foo-project/src/ 文件夹中我正在编译并且 运行ning 像这样:
javac -cp .:../library/Bar.jar -d . com/foo/packmain/Foo.java
java com.foo.packmain.Foo
异常信息:
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
那么,我的问题是我该如何解决这个问题?
您编译项目没有错误:
javac -cp .:../library/Bar.jar -d . com/foo/packmain/Foo.java
但是您对 运行 您的应用程序的命令不包含类路径中的 Bar.jar。
您还必须在此处包含您的 JAR 文件:
java -cp .:../library/Bar.jar com.foo.packmain.Foo
这是了解这些东西在较低级别如何工作的好方法,您可以更好地了解更高级别的工具,如 IDE 或 Maven 的真正作用。
我正在尝试使用 IDE 在我的项目中导入一个 .jar 文件,在我 运行 程序之前,我所做的一切工作正常。当我 运行 它时,我收到以下错误消息。
所以,我创建了这个 bar-project 文件夹,我创建了 .jar 文件。
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.");
}
}
在文件夹 bar-project/src/ 我是这样编译的:
javac -d . com/bar/packmain/Bar.java
要创建 jar 文件,我使用以下命令: jar -cvf Bar.jar com/bar/packmain/Bar.class
然后我将这个 .jar 移动到我的另一个名为 foo-project 的项目中。
foo-project/resources
foo-project/library/Bar.jar
foo-project/src/com/foo/packmain/Foo.java
Foo.java: 包裹 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();
}
}
在 foo-project/src/ 文件夹中我正在编译并且 运行ning 像这样:
javac -cp .:../library/Bar.jar -d . com/foo/packmain/Foo.java
java com.foo.packmain.Foo
异常信息:
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
那么,我的问题是我该如何解决这个问题?
您编译项目没有错误:
javac -cp .:../library/Bar.jar -d . com/foo/packmain/Foo.java
但是您对 运行 您的应用程序的命令不包含类路径中的 Bar.jar。 您还必须在此处包含您的 JAR 文件:
java -cp .:../library/Bar.jar com.foo.packmain.Foo
这是了解这些东西在较低级别如何工作的好方法,您可以更好地了解更高级别的工具,如 IDE 或 Maven 的真正作用。