Mam aplikację (specjalnie uproszczoną dla testowania)
import java.io.;
import jartest.;
class JarTest {
static ProcTest pt;
public static void main(String[] args) {
File f;
f = new File(".");
String gdzie = f.getAbsolutePath();
System.out.println("JarTest: jestem tu: "+gdzie);
pt = new ProcTest();
}
}
Klasa ProcTest jest umieszczona w pliku JarTlib.jar , który znajduje się w katalogu C:\prolog, a ten katalog jest w zmiennej CLASSPATH
Jej kod źródłowy jest taki:
package jartest;
import java.io.;
import javax.swing.;
public class ProcTest {
public ProcTest( ) {
Class c = getClass();
String klasa = c.getName();
System.out.println("ProcTest czyli: "+klasa);
}
}
Program JarTest skompilował się pomyślnie, a jego "zwykłe" uruchomienie djje oczekiwany wynik:
C:\prolog\JarTestKat>java JarTest
JarTest: jestem tu: C:\prolog\JarTestKat.
ProcTest czyli: jartest.ProcTest
Ale ten program umieściłem w pliku JarTest.jar a próba jego wykonania daje efekt taki:
C:\prolog\JarTestKat>java -jar JarTest.jar
JarTest: jestem tu: C:\prolog\JarTestKat.
Exception in thread "main" java.lang.NoClassDefFoundError: jartest/ProcTest
at JarTest.main(JarTest.java:13)
Caused by: java.lang.ClassNotFoundException: jartest.ProcTest
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 1 more
C:\prolog\JarTestKat>
Czy ktoś mógłby wytłumaczyć dlaczego tak się dzieje ?
Nie jest to w moim życiu zawodowym pierwszy przypadek, kiedy umieszczałem aplikację w pliku jar, ale dotychczas takich "efektów" nie miałem. Pierwszy raz natomiast zdarzyło się, że odwoływałem się do włosnych klas umieszczonych w innym katalogu i to nie będącym podkatalogiem katalogu aplikacji.
Będę wdzięczny za wszelkie wtjaśnienia