2010-01-25 2 views
5

Я новичок в Java, и я не знаю, как получить доступ к файлу класса, расположенному в определенном каталоге, из отдельной программы jar.Настройка класса классов Java для загрузки файла класса

К примеру, у меня есть третий файл сторона банка, расположенный в /, который, как предполагается загрузить MyClass, расположенные в /mylib/MyClass.class, поэтому я попытался запустить:

java -jar mainprog.jar -classpath "/mylib" MyClass 

, но я получаю ошибка:

Exception in thread "main" java.lang.NoClassDefFoundError: MyClass 
Caused by: java.lang.ClassNotFoundException: MyClass 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:221) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:209) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:324) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:269) 
     at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:337) 

Что я делаю неправильно?

ответ

11

При использовании "-jar" тогда только устанавливается атрибут Class-Path определен в META-INF/MANIFEST.MF файле внутри jar файла будет влиять на пути к классам.

Он также игнорирует аргумент MyClass (или более конкретно: интерпретирует его как аргумент основного класса, определенного в MANIFEST.MF).

Если вы просто хотите, чтобы вызвать класс из этого кувшина называть это так:

java -cp mainprog.jar:/mylib MyClass 
// or using this one on windows: 
java -cp mainprog.jar;/mylib MyClass 
2

В командной строке вы пытаетесь запустить MyClass как программу, которая на основе вашего описания не то, что вы хотеть.

Вам нужно выяснить, что такое основной класс, который используется для выполнения программы в банке. Вы можете распаковать файл jar с помощью jar -xf mainprog.jar и посмотреть файл META-INF/MANIFEST.MF. Он должен иметь запись, которая указывает, что основной класс jar (я не могу запомнить имя записи прямо сейчас).

После чем изменить командную строку, чтобы что-то вроде этого:

java -classpath /mainprog.jar:/mylib package.name.to.jar.MainClass