2014-11-18 2 views
1

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

В командной строке Windows я указать CLASSPATH в мою папку банку так:

set CLASSPATH="D:\jarFolder" 

И есть test.jar файл в этой папке. Но когда я запускаю этот

java -jar test.jar 

он все еще не удалось с этой ошибкой:

Unable to access jarfile test.jar 

я могу запустить test.jar по указать полный путь. Но я хочу знать, почему CLASSPATH не работает. Я понимаю, что он сообщает java runtime, где можно найти файл jar.

+1

Оба ответа на 100% правильные, поэтому я понятия не имею, почему они не «полезны». – jdv

+0

Я не заметил их. Кто-то другой это сделал. – smwikipedia

ответ

0

Jarfiles должны быть на пути к классам явно. Недостаточно указать атрибут classpath для jarfile.

Смотрите related Oracle docs в командной строке Java:

When you use this option, the JAR file is the source of all user classes, and other user class path settings are ignored.

+0

Я попробовал этот 'set CLASSPATH =" D: \ jarFolder \ test.jar "', по-прежнему ту же ошибку, если я использую 'java -jar test.jar', но он работает, если я укажу имя пакета, например, это' java ab ClassName'. Не знаю, почему ... – smwikipedia

+0

Вы задаете начальный класс? Поддержка jarfile явно в пути к классам поддерживается и является единственным способом вызвать класс, который не является основным классом в манифесте. – jdv

+0

Да, я задаю начальный класс. Я просто смущен, почему он не может объединить папку CLASSPATH и имя файла test.jar, чтобы сделать полный путь. – smwikipedia

0

Попробуйте использовать

java -jar D:\jarFolder\test.jar 

Если вы знаете, главное имя класса точки входа в баночке. Вы можете использовать

set CLASSPATH="D:\jarFolder" 
java yourpackage.yourEntryPoint 

Вы можете узнать вашу точку входа файла банка с помощью почтового индекса программы для извлечения файла банки и чтением file entry point section of manifest.mf file.

Когда вы используете опцию -jar, вам необходимо указать, какую банку. Подумайте об этом так. Если вы не укажете имя jar, которое должно выполнить jar java? У вас может быть 10,20 может быть 100 банок в вашем классе.

Но если вы даете имя класса, то java ищет среди банок и выполняет правильный.

+0

Я пробовал этот 'set CLASSPATH =" D: \ jarFolder \ test.jar "', по-прежнему ту же ошибку, если я использую 'java -jar test.jar', но он работает, если Я указываю имя пакета как это 'java abClassName'. Не знаю, почему ... – smwikipedia

+0

Вопрос в том, как java runtime вычисляет полный путь jar? – smwikipedia

+0

Поскольку аргумент java является стартовым классом, и вы его поставляете, поскольку он находится в файле манифеста. java -jar .... просто удобство в добавлении jarfile в путь к классам и вызов java на полностью квалифицированном стартовом классе, указанном в файле манифеста jar. – jdv