А есть код Java, как:копирования файла банка в загрузочном пути к классам не работает
public class Hello
{
public void print()
{
System.out.println("Hi");
}
}
Я скомпилировал и создал Hello.class. Я добавил его в файл hello.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
[email protected]
$
Если удалить hello.jar из класса расширения пути и скопировать его в загрузочном пути класса ремня (USR/Библиотека/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 бросает это Исключение, если оно правильно? Если я не прав, пожалуйста, направляйте меня.