Добавить файл Jar в путь сборки в командной строке Windows

Меня очень раздражает необходимость спрашивать об этом, но я не могу заставить его работать. В настоящее время у меня есть проект с:

5 классов в папке src/

2 JARS с именами profiles.jar и classifier.jar в корневой папке

Я хочу создать makefile? или "пакетный файл?" компилировать и запускать эти классы ИЗ КОМАНДНОЙ СТРОКИ WINDOWS, но сначала добавить файлы jar в путь сборки? Я не уверен, как мне это сделать

Когда я пытаюсь это сделать, он говорит, что класс не найден, скорее всего, из-за того, что я неправильно добавил банки в путь сборки. Какие команды мне нужно использовать, чтобы запустить это в командной строке?

Спасибо, Филипп.

ИЗМЕНИТЬ

Спасибо за помощь, у меня много проблем с тем, чтобы заставить его работать. В настоящее время у меня есть проект с 5 классами в папке src и 2 jar в папке jar.

Вот команды, которые я запускаю:

установить CLASSPATH = C:\wamp\www\news\UserProfiling\jars\classifier.jar; C:\wamp\www\news\UserProfiling\jars\profiles.jar

Затем из корневой папки я запускаю:

javac источник/*.java

Потом:

java -cp ./src:./jars/* src/Взаимодействие

Взаимодействие - это основной класс, я получаю всевозможные ошибки noclassfound, я что-то не так делаю? Большое спасибо Филипп

ОШИБКА

java -cp ./src:./jars/* Исключение взаимодействия в потоке «основной» java.security.AccessController.doPrivileged (собственный метод) на java.net.URLClassLoader.findClass (неизвестный источник) на java.lang.ClassLoader.loadClass (неизвестный источник) на sun.misc.Launcher$AppClassLoader.loadClass (неизвестный источник) на java.lang.ClassLoader.loadClass(неизвестный источник) в java.lang.ClassLoader.loadClassInternal(неизвестный источник) Не удалось найти основной класс: Взаимодействие. Программа будет закрыта.


person Phil    schedule 16.12.2009    source источник
comment
В каком пакете Interaction? (я бы ожидал что-то вроде com.bla.Interation)   -  person Joel    schedule 16.12.2009
comment
Ошибка, которую вы получаете, связана с тем, что вы не используете полное имя основного класса, которое должно включать пакет. Поэтому вместо «Interation» вам нужно что-то вроде «com.x.y.Interation».   -  person Joel    schedule 16.12.2009
comment
Первоначально он был в пакете по умолчанию, так как это очень маленькая программа, но затем я попытался поместить его в пакет под названием test и запустить: java -cp ./src:./jars/* UserProfiling.Test.Interaction (UserProfiling название моего проекта это правильно?) Но я все еще получаю ту же ошибку   -  person Phil    schedule 16.12.2009
comment
Я заметил, что вы продолжаете упоминать src, который, очевидно, находится там, где находится ваш исходный код Java. Но CP должен указать, где находятся скомпилированные файлы .class! Они тоже в src? Кроме того, в вашем предыдущем комментарии у вас разные заглавные буквы теста.   -  person Carl Smotricz    schedule 17.12.2009


Ответы (4)


В версии старше или равной версии Java 5 вы должны указать каждую банку отдельно и корень вашего источника в вашем пути к классам, например.

java -cp a.jar:b.jar:c.jar:./src MainClass

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

java -cp ./src:* MainClass

но может быть чище поместить ваши банки в подкаталог, например.

java -cp ./src:./jars/* MainClass

Таким образом, ваш make-файл или сценарий запуска должны создать команду, подобную одной из приведенных выше.

Дополнительная информацияSun docs (v6)

Обновить — в ответ на ваше второе редактирование вам нужно указать полное имя основного класса, поэтому, если класс находится в пакете с именем «com.mypackage.MainClass», вам нужно сделать:

java -cp ./src:./jars/* com.mypackage.MainClass

Я также предлагаю сначала заставить команду работать как отдельную команду, прежде чем запускать весь скрипт. Удаление движущихся частей ускорит отладку и упростит просмотр происходящего.

person Joel    schedule 16.12.2009
comment
Спасибо за помощь, у меня много проблем с тем, чтобы заставить его работать. В настоящее время у меня есть проект с 5 классами в папке src и 2 jar в папке jar. Вот команды, которые я запускаю: set CLASSPATH=C:\wamp\ www\news\UserProfiling\jars\classifier.jar ;C:\wamp\www\news\UserProfiling\jars Затем из корневой папки я запускаю: javac src/*.java Затем: java -cp ./src:./ jars/* src/Interaction Взаимодействие является основным классом, я получаю всевозможные ошибки noclassfound, я делаю что-то не так? Большое спасибо Филипп - person Phil; 16.12.2009

Я бы посоветовал вам взглянуть на ant или maven. Ant — это решение, позволяющее довольно просто делать то, что вы хотите сделать, maven не так прост, но имеет свои преимущества, когда дело доходит до управления зависимостями.

person Thomas Lötzer    schedule 16.12.2009
comment
Я предполагаю, что муравей maven излишен для того, что хочет сделать Фил, что может быть просто разовой задачей. Но да, на долгосрочную перспективу стоит посмотреть... - person Joel; 16.12.2009
comment
ant достаточно прост в настройке и использовании, а наличие файла проекта позволяет легко повторить процесс и/или изменить/расширить его. maven, с другой стороны,... ну, я предпочитаю избегать этого. - person Carl Smotricz; 16.12.2009

О вашем втором вопросе: если вы используете

java -cp ./src:./jars/* src/Interaction

он попытается запустить несуществующий класс src/Interaction. src уже находится в вашем пути к классам, поэтому вам просто нужно сделать

java -cp ./src:./jars/* Interaction
person Valentin Rocher    schedule 16.12.2009
comment
спасибо, все еще получаю ту же ошибку. Добавлено в описание вопроса - person Phil; 16.12.2009

Нашел вашу проблему, я думаю.

javac источник/*.java

java -cp ./src:./jars/* src/Взаимодействие

Эта проблема беспокоит многих новичков: вам нужно запускать javac и java из каталога, где начинается ваше исходное дерево. В вашем случае это каталог src. Поскольку src не появляется в именах ваших пакетов, его также не должно быть в ваших путях компиляции/выполнения.

Так что вы должны

cd UserProfiling/src 

и беги

javac *.java 

и

java -cp .:../jars Interaction 

оттуда.

person Carl Smotricz    schedule 17.12.2009