在引导类路径中复制 jar 文件不起作用
A 有一个 Java 代码作为:
public class Hello
{
public void print()
{
System.out.println("Hi");
}
}
我编译了它并创建了一个Hello.class。我把它添加到Jar文件中,你好.jar作为:
$jar -cvf hello.jar Hello.class
我又写了一个程序:
class Test1
{
public static void main(String[] args)
{
new Hello().print();
System.out.println(Hello.class.getClassLoader());
}
}
并从当前目录中删除了Hello.class。
然后我在扩展类路径中复制了hello.jar。我的程序工作正常,因为:
$sudo cp hello.jar /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/ext
$ java Test1
Hi
sun.misc.Launcher$ExtClassLoader@28d93b30
$
如果我从扩展类路径中删除hello.jar并将其复制到boot strap类路径(usr/lib/jvm/java-8-openjdk-amd64/jre/lib/)中,其中也包含rt.jar,那么我的程序就无法正常工作。
$ java Test1
Exception in thread "main" java.lang.NoClassDefFoundError: Hello
at Test1.main(Test1.java:5)
Caused by: java.lang.ClassNotFoundException: Hello
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 1 more
据我所知,引导或扩展类装入器中的所有jar文件都可以在程序中使用。如果 Java 是正确的,为什么会抛出该异常?如果我不正确,那么请指导我。