Добавить файл JAR в Buildpath в командной строке Windows - PullRequest
4 голосов
/ 16 декабря 2009

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

5 Классы в папке src /

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

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

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

Спасибо Philip

EDIT

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

Вот команды Я бегу:

комплект CLASSPATH = C: \ WAMP \ WWW \ Новости \ UserProfiling \ баночки \ classifier.jar ; C: \ WAMP \ WWW \ Новости \ UserProfiling \ баночки \ profiles.jar

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

javac src / *. Java

Тогда:

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

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

ОШИБКА

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

Ответы [ 4 ]

5 голосов
/ 16 декабря 2009

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

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

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

1 голос
/ 16 декабря 2009

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

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

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

java -cp ./src:./jars/* Interaction
1 голос
/ 16 декабря 2009

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

0 голосов
/ 17 декабря 2009

Я думаю, что нашел вашу проблему.

javac src / *. Java

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

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

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

cd UserProfiling/src 

и запустить

javac *.java 

и

java -cp .:../jars Interaction 

оттуда.

...