Куда ставить внешние банки?

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

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

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

Изменить: этот вопрос касается не импорта банок в Eclipse, а их использования вне Eclipse.


person Burkhard    schedule 28.11.2008    source источник


Ответы (9)


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

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

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

person James Camfield    schedule 28.11.2008
comment
Код компилируется внутри eclipse. При запуске вне eclipse (т.е. другой графический интерфейс вызывает функцию внутри банки) я получаю NoClassDefFoundError. - person Burkhard; 28.11.2008
comment
Или вы можете просто щелкнуть банку правой кнопкой мыши и выбрать BuildPath- ›Добавить в путь сборки. - person Dave Ray; 28.11.2008
comment
Когда вы запускаете все, что находится за пределами eclipse, вы должны предоставить свои двоичные файлы проекта eclipse (если они не созданы в банке) в пути к классам того, что вы запускаете. - person James Camfield; 28.11.2008
comment
Я совершенно запуталась, куда добавить банки. Внутри созданной папки lib? или внутри war / WEB-INF / lib? - person karlihnos; 05.04.2017

положи его в свою jre/lib/ext папку

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

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

person Simon    schedule 28.11.2008
comment
Интересно, но у меня на компьютере три JRE и три JDK, я не думаю, что дублирую все нужные мне библиотеки. - person PhiLho; 28.11.2008
comment
у вас может быть три (я тоже), но вы всегда используете только один, который определяется вашим JAVA_HOME. Кроме того, ваш сторонний инструмент может иметь разные версии для разных JRE, поэтому у вас будет обратная проблема дублирования, если вы не воспользуетесь этим подходом. Это то, для чего нужен jre / lib / ext. - person Simon; 28.11.2008
comment
Короче достаточно полезно. - person asifaftab87; 12.01.2016

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

person Jon Skeet    schedule 28.11.2008
comment
Проект, не относящийся к Eclipse, мной не настраивается и не поддерживается. Фактически, я только что написал несколько классов, и один из этих классов использует другой класс из файла jar. - person Burkhard; 28.11.2008
comment
Значит, вы не можете настроить другой проект вообще с точки зрения пути к классам? Рано или поздно это обязательно тебя укусит. Вместо того, чтобы обходить это ограничение, постарайтесь его исправить. - person Jon Skeet; 28.11.2008

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

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

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

person user3132194    schedule 24.12.2013
comment
Просто чтобы подтвердить, что это хорошо сработало в 2020 году и в Visual Studio Code. Я добавил фреймворк osgi в C: \ Program Files \ Java \ jdk1.8.0_241 \ jre \ lib \ ext, закрыл и открыл код Visual Studio и смог правильно импортировать библиотеку. От себя лично мне нравится этот подход, поскольку он предназначен для существования самого JDK. - person Paolo; 19.03.2020

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

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

person VonC    schedule 28.11.2008

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

person guerda    schedule 28.11.2008

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

person javamonkey79    schedule 28.11.2008

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

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

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

person JeeBee    schedule 28.11.2008

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

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

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

person Robin    schedule 28.11.2008