Вопрос

На этот вопрос уже есть ответ здесь:

Я использую Eclipse (3.4), и мой класс компилируется без предупреждений или ошибок.Мой проект использует внешний jar-файл.

Куда мне нужно поместить этот внешний файл jar, чтобы не получить java.lang.NoClassDefFoundError при использовании этого класса из другого проекта (не в Eclipse)?

Я мог бы просто извлечь jar в папку проекта, но это кажется неправильным.

Редактировать:этот вопрос касается не импорта jar-файлов в Eclipse, а их использования вне Eclipse.

Это было полезно?

Решение

Если вы хотите включить файл JAR в свой проект Eclipse, вы обычно создаете папку 'lib' внутри папки проекта и помещаете туда файл.Затем вам нужно сообщить eclipse включить его в ваш путь к классу, чтобы ваш код скомпилировался и запустился внутри eclipse.

Чтобы сделать это:
- Перейдите в свойства вашего проекта
- Выберите "Путь сборки Java" в левой колонке
- Выберите вкладку "Библиотеки" в центральной части окна
- Нажмите кнопку Добавить JARS - это выдаст вам список ваших проектов в eclipse - разверните свой проект и перейдите в папку lib - ваша jar будет там.
- Выберите JAR, нажмите OK и еще раз OK в окне свойств.

Теперь ваш код будет скомпилирован и запущен.

Другие советы

положите это в свой jre/lib/ext папка

все, что сказано о classpath, верно, но это последовательное и разумное место для его использования.

вы можете узнать свою папку jre, просмотрев переменную среды JAVA_HOME в Windows.

Не имеет особого значения, куда вы его поместите, но вам нужно настроить ваш другой проект, не относящийся к Eclipse, для размещения внешних jar-файлов в его classpath - или использовать механизм каталогов расширений, если необходимо.(Это проще, но сделать это явным, возможно, лучше.)

Ответ Саймона кажется лучшим, но сейчас он немного устарел.Погуглил этот документ Оракула Установленные расширения .

Начиная с Java 6, файлы JAR с расширениями также могут размещаться в расположении, которое не зависит от какой-либо конкретной JRE, так что расширения могут быть общими для всех JRE, установленных в системе.

В нем говорится , что для Windows вы должны разместить свои расширения здесь %SystemRoot%\Sun\Java\lib\ext .

Вам просто нужно сослаться на него, используя -classpath опция, в папке, которая не включена в рабочую область eclipse, т. е.который вообще не зависит от eclipse.

Предупреждение, вы не можете выполнить свой другой проект с java -jar если вы ссылаетесь на свой внешний jar с -cp вариант (смотрите этот вопрос)

Я помещаю его в новую папку.Эта папка должна быть включена в путь сборки.Не имеет значения, находится ли это в Eclipse или снаружи.У Eclipse есть путь сборки для конкретного проекта, и он передает этот путь в javac.Если вы хотите выполнить javac вне Eclipse, вам нужно передать путь сборки вручную.

Я знаю, что это не совсем то, о чем вы просите, но рассматривали ли вы возможность использования Maven?Некоторые из плагинов, таких как assembly, могут быть полезны в подобных ситуациях.

Заведите банку внутри Eclipse, как написал Джеймс Кэмфилд.

Затем, когда вы создаете (Ant, Maven, вручную) для распространения, убедитесь, что файл jar включен в jar вашего приложения, war или ear или любой другой файл, и что любые сценарии запуска включают его в classpath, используя параметр командной строки -classpath для java, как написал VonC.

Не беспокойтесь о том, чтобы поместить jar-файлы в папку java extensions, все, что это сделает, это заставит вас забыть об этом, когда дело дойдет до отправки вашего кода третьей стороне для использования, потому что они не будут настраивать его в конце.

Создайте общий каталог lib и поместите туда этот jar и любые другие распространенные файлы jars, которые у вас могут быть.Если вы используете Maven, то у вас уже есть он в виде локального репозитория.

В Eclipse создайте переменную classpath для этого каталога, а затем используйте ее для ссылки на ваш jar-файл в ваших проектах.Если у вас есть несколько проектов, отвечающих этим условиям, это значительно облегчит жизнь.Это также упрощает изменение расположения корневого каталога, если вы переходите с локального диска на сетевой.

Во внешнем приложении вы также включите этот jar-файл из его общего расположения в apps classpath.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top