A masz kodu Java jak:kopiowania pliku jar w ścieżce klasy bootstrap nie pracuje
public class Hello
{
public void print()
{
System.out.println("Hi");
}
}
Skompilowałem go i stworzył Hello.class. Dodałem go do słoika plików hello.jar jak:
$jar -cvf hello.jar Hello.class
napisałem jeden program jako:
class Test1
{
public static void main(String[] args)
{
new Hello().print();
System.out.println(Hello.class.getClassLoader());
}
}
i usunięte Hello.class z bieżącego katalogu.
Następnie skopiowałem plik hello.jar w ścieżce rozszerzenia. działa mój program w porządku, jak:
$sudo cp hello.jar /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/ext
$ java Test1
Hi
[email protected]
$
Jeśli usunę hello.jar od klasy drogi rozbudowa i skopiować go do butów klasy pasek ścieżki (usr/lib/jvm/java-8-openjdk-amd64/jre/lib /), który zawiera także rt.jar, a następnie mój program nie działa.
$ 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
Zgodnie z moją wiedzą wszystkie pliki jar w bootstrap lub ładowaczu klasy rozszerzeń mogą być używane w programie. Dlaczego Java rzuca ten wyjątek, jeśli jest poprawny? Jeśli nie mam racji, proszę, poprowadź mnie.