Как импортировать библиотеку в java
Перейти к содержимому

Как импортировать библиотеку в java

  • автор:

Как импортировать библиотеку в java

Как правило, в Java классы объединяются в пакеты. Пакеты позволяют организовать классы логически в наборы. По умолчанию java уже имеет ряд встроенных пакетов, например, java.lang , java.util , java.io и т.д. Кроме того, пакеты могут иметь вложенные пакеты.

Организация классов в виде пакетов позволяет избежать конфликта имен между классами. Ведь нередки ситуации, когда разработчики называют свои классы одинаковыми именами. Принадлежность к пакету позволяет гарантировать однозначность имен.

Чтобы указать, что класс принадлежит определенному пакету, надо использовать директиву package , после которой указывается имя пакета:

Как правило, названия пакетов соответствуют физической структуре проекта, то есть организации каталогов, в которых находятся файлы с исходным кодом. А путь к файлам внутри проекта соответствует названию пакета этих файлов. Например, если классы принадлежат пакету mypack, то эти классы помещаются в проекте в папку mypack.

Классы необязательно определять в пакеты. Если для класса пакет не определен, то считается, что данный класс находится в пакете по умолчанию, который не имеет имени.

Например, создадим в папке для исходных файлов каталог study . В нем создадим файл Program.java со следующим кодом:

Директива package study в начале файла указывает, что классы Program и Person, которые здесь определены, принадлежат пакету study.

Когда мы работаем в среде разработки, например, в Netbeans, то IDE берет на себя все вопросы компиляции пакетов и входящих в них файлов. Соответственно нам достаточно нажать на кнопку, и все будет готово. Однако если мы компилируем программу в командной строке, то мы можем столкнуться с некоторыми трудностями. Поэтому рассмотрим этот аспект.

Для компиляции программы вначале в командной строке/терминале с помощью команды cd перейдем к папке, где находится каталог study.

Например, в моем случае это каталог C:\java (то есть файл с исходным кодом расположен по пути C:\java\study\Program.java).

Для компиляции выполним команду

После этого в папке study появятся скомпилированные файлы Program.class и Person.class. Для запуска программы выполним команду:

Компиляция пакетов в Java

Импорт пакетов и классов

Если нам надо использовать классы из других пакетов, то нам надо подключить эти пакеты и классы. Исключение составляют классы из пакета java.lang (например, String ), которые подключаются в программу автоматически.

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

То есть мы указываем полный путь к файлу в пакете при создании его объекта. Однако такое нагромождение имен пакетов не всегда удобно, и в качестве альтернативы мы можем импортировать пакеты и классы в проект с помощью директивы import , которая указывается после директивы package:

Директива import указывается в самом начале кода, после чего идет имя подключаемого класса (в данном случае класса Scanner).

В примере выше мы подключили только один класс, однако пакет java.util содержит еще множество классов. И чтобы не подключать по отдельности каждый класс, мы можем сразу подключить весь пакет:

Теперь мы можем использовать любой класс из пакета java.util.

Возможна ситуация, когда мы используем два класса с одним и тем же названием из двух разных пакетов, например, класс Date имеется и в пакете java.util , и в пакете java.sql . И если нам надо одновременно использовать два этих класса, то необходимо указывать полный путь к этим классам в пакете:

Статический импорт

В java есть также особая форма импорта — статический импорт. Для этого вместе с директивой import используется модификатор static :

Здесь происходит статический импорт классов System и Math. Эти классы имеют статические методы. Благодаря операции статического импорта мы можем использовать эти методы без названия класса. Например, писать не Math.sqrt(20) , а sqrt(20) , так как функция sqrt() , которая возвращает квадратный корень числа, является статической. (Позже мы рассмотрим статические члены класса).

То же самое в отношении класса System: в нем определен статический объект out , поэтому мы можем его использовать без указания класса.

Java. Пакеты. Использование пакетов в Java. Директивы import и package. Компилированные модули (*.java). Промежуточные .class файлы. Структура проекта. Использование стандартных библиотек Java

Пакеты. Использование пакетов в Java. Директивы import и package . Компилированные модули ( *.java ). Промежуточные .class файлы. Структура проекта. Использование стандартных библиотек Java

Содержание

  • 1. Пакеты в Java
  • 2. Как подключить пакет к существующему проекту в Java Eclipse? Структура проекта, который содержит пакеты
  • 3. Какая общая форма вызова класса из пакета? Пример
  • 4. Пример, который демонстрирует использование одного имени класса в разных пакетах и в разных каталогах (папках)
  • 5. Какое назначение директивы import ? Общая форма. Пример
  • 6. Как в директиве import указать, что могут быть использованы все классы из данного пакета?
  • 7. Что собой представляет ключевое слово package ?
  • 8. Что такое компилированный модуль в Java?
  • 9. Какие требования к реализации компилированного модуля ( .java )?
  • 10. Сколько классов могут быть реализованы в компилированном модуле?
  • 11. Какое назначение файлов с расширением .class ?
  • 12. Какие преимущества дает использование ключевых слов package и import ?
  • 13. Пример, который демонстрирует структуру проекта и размещение компилированных модулей
  • 14. Пример подключения класса из стандартной библиотеки Java

Поиск на других ресурсах:

1. Пакеты в Java

Каждый проект на языке Java в своей работе использует так называемые пакеты. Пакет – это отдельный модуль (пространство имен), которому соответствует одноименный каталог (папка). Пакет содержит библиотеки (группы) классов. Эти классы объединены между собой в одном пространстве имен или пакете. Количество реализованных классов в пакете неограничено. Классы, которые объявляются в пакете, реализуются в файлах с расширением *.java .

Пакеты могут иметь разнообразные уровни вложения (подкаталоги, подпапки). На разных уровнях вложения пакетов имена могут повторяться. Сохранение пакетов и файлов *.java в проекте осуществляется в виде древовидной структуры файловой системы.

2. Как подключить пакет к существующему проекту в Java Eclipse? Структура проекта, который содержит пакеты

В системе Java Eclipse подключение пакета есть стандартной командой. Предварительно может быть создан проект. В проекте может размещаться произвольное количество пакетов. В каждом пакете может быть произвольное количество классов.

Для создания пакета в некотором проекте используется команда

В результате откроется окно, изображенное на рисунке 1. В окне указывается имя проекта и пакета, который будет размещаться в этом проекте.

Java Eclipse. Окно "New Java Package". Создание пакета в проекте

Рис. 1. Окно «New Java Package» . Создание пакета с именем MyPackage в проекте MyProject03

После выбора кнопки Finish происходит следующее. Проекту с именем MyProject03 соответствует специальная папка (каталог) с таким же именем. В этом каталоге создается несколько подкаталогов (подпапок). Один из них подкаталог с именем src. В этом подкаталоге создается каталог MyPackage , соответствующий создаваемому пакету.

3. Какая общая форма вызова класса из пакета? Пример

Чтобы обратиться к имени класса из пакета используется следующая общая форма:

  • PackageName – имя пакета, в котором реализован класс с именем ClassName ;
  • ClassName – имя класса.

Если пакет PackageName1 содержит подпапку (подпакет) с именем PackageName2 , то доступ к классу с именем ClassName имеет вид:

Подобным образом формируется доступ к классу в случае более более сложных уровней вложения.

Например. Пусть задан пакет с именем Figures . В пакете реализованы два класса с именами Circle и Rectangle . Тогда, фрагмент кода, который создает объекты этих классов будет следующий:

4. Пример, который демонстрирует использование одного имени класса в разных пакетах и в разных каталогах (папках)

На рисунке 2 изображена иерархия, которую могут образовывать пакеты.

Java Eclipse. Окно Package Explorer. Отображение проектов

Рис. 2. В проекте MyProject03 три пакета с именами MyPackage01 , MyPackage02 , MyPackage02.MyFolder02

Как видно из рисунка, в проекте MyProject03 созданы 3 пакета с именами MyPackage01 , MyPackage02 , MyPackage03 . Каждый из пакетов имеет класс с одинаковым именем MyClass01 . Таким образом происходит разделение одинаковых имен.

Ниже приведен демонстрационный код, создающий объекты классов MyClass01 , которые размещены в разных пакетах (папках), согласно схеме из рисунка 2.

Как видно из программного кода, доступ к классу из пакета осуществляется с помощью разделителя ‘ . ‘ (точка). С целью сокращения весьма больших строк доступа к имени класса, используется директива import .

5. Какое назначение директивы import ? Общая форма. Пример

Директива import позволяет сократить весьма длинные строки обращений к классам (интерфейсам, перечислениям), которые реализованы в пакетах.

В простейшем случае общая форма директивы import следующая:

  • PackageName – имя пакета, который подключается;
  • ClassFileName – имя файла с расширением *.java , в котором реализован класс или группа классов, к которому нужно обращаться по сокращенному имени.

Например. Пусть в некотором проекте задан пакет Figures. В пакете Figures реализован один класс с именем Circle . Класс размещен в файле «Circle.java» . Исходный код файла Circle.java , который реализует класс Circle, имеет вид:

Чтобы из любого другого класса, который размещается в другом пакете данного проекта, иметь доступ к методам файла Circle.java из пакета Figures нужно в начале указать:

Ниже приводится пример подключения и использования класса Circle из другого пакета и другого класса.

Если в пакете OtherPackage убрать строку

то объект класса Circle нужно было бы создавать следующим образом

6. Как в директиве import указать, что могут быть использованы все классы из данного пакета?

Бывают случаи, когда в пакете реализованы несколько классов (файлов с расширениями *.java ) и возникает необходимость подключения всего множества классов. В этом случае общая форма директивы import может быть следующая:

  • Package – имя пакета с библиотекой подключаемых классов.
7. Что собой представляет ключевое слово package ?

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

Если в модуле (файле с расширением .java ) указывается строка наподобие

то это означает, что данный модуль есть частью библиотеки с именем PackageName .

8. Что такое компилированный модуль в Java?

Каждый компилированный модуль – это файл, который содержит исходный код на языке Java. Этот файл имеет расширение «*.java» . Имя файла совпадает с именем открытого ( public ) класса, который реализован в этом модуле. Это требование есть обязательным.

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

9. Какие требования к реализации компилированного модуля ( .java )?

К реализации компилированного модуля предъявляются следующие требования:

  • имя компилированного модуля должно иметь расширение .java ;
  • имя компилированного модуля без учета расширения .java должно совпадать с именем открытого ( public ) класса, который реализован в этом модуле;
  • имя компилированного модуля и имя реализованного в нем открытого класса должны начинаться из большой буквы;
  • в компилированном модуле может быть не более одного открытого ( public ) класса. Если в компилированном модуле есть еще другие (вспомогательные) классы, то они должны быть скрытыми (без модификатора public ).
10. Сколько классов могут быть реализованы в компилированном модуле?

Компилированный модуль может иметь любое количество классов. Однако, открытым ( public ) должен быть только один класс. Имя этого класса должно совпадать с именем компилированного модуля.

11. Какое назначение файлов с расширением .class ?

Файлы с расширением .class получаются в результате компиляции файлов с расширением .java (компилированных модулей). Файлы с расширением .class есть промежуточными файлами, которые затем объединяются компоновщиком в исполнительный модуль.

Например, в языке программирования Delphi временные скомпилированные файлы имели расширение *.dcu . В языке программирования C++ временные скомпилированные файлы имели расширение .obj . После компоновки из этих файлов получался *.exe файл (исполняемый модуль).

После этого, файлы с расширением .class объединяются в пакет и сжимаются утилитой JAR . Это все осуществляет интерпретатор Java.

12. Какие преимущества дает использование ключевых слов package и import ?

Использование ключевых слов package и import позволяет удобно поделить пространство имен таким образом, чтобы предотвратить возникновению конфликтов между разными разработчиками классов на Java.

13. Пример, который демонстрирует структуру проекта и размещение компилированных модулей

Пусть в Java Eclipse создан проект с именем Project03 . Проект размещается в папке по умолчанию, которая используется системой Java Eclipse. В проекте созданы 2 пакета с именами Figures , OtherPackage . В пакетах реализованы по одному компилированному модулю соответственно с именами Circle.java и MyClass.java . Рисунок 3 отображает структуру проекта Project03 системы Java Eclipse.

Java Eclipse. Отображение структуры проекта в окне Package Explorer

Рис. 3. Отображение структуры проекта Project03 в окне Package Explorer

В файле (модуле) Circle.java разработан класс Circle . В файле MyClass.java разработан класс MyClass . В классе MyClass из пакета OtherPackage (см. рис. 3) подключается модуль Circle.java с помощью директивы

Если компилятор встречает директиву import , он формирует полное имя с учетом пути к каталогу, который записан по умолчанию в системе.

таким образом, получается полное имя модуля Circle.java :

По желанию путь к каталогу (папке) по умолчанию можно изменить.

14. Пример подключения класса из стандартной библиотеки Java

Чтобы обратиться к имени класса из стандартной библиотеки Java используется один из двух способов:

  1. Использование полной формы или полного имени класса в библиотеке.
  2. Использование сокращенной формы имени класса. В этом случае, полное имя пакета с нужным классом, может быть задано явным образом с помощью директивы import .

Полная форма обращения к имени нужного класса в простейшем случае выглядит так

  • PackageName – имя пакета или стандартной библиотеки Java (например, util, math, applet и прочее). Пакеты или библиотеки могут иметь уровни вложения. Если библиотеки содержат вложения, то они разделяются символом ‘ . ‘ ;
  • ClassName – имя класса (или интерфейса), который реализован в библиотеке PackageName (например ArrayList , BigDecimal и т.п.).

Например. Фрагмент кода, который использует класс Vector из стандартной библиотеки Java. В данном случае стандартная библиотека Java носит имя java.util .

В вышеприведенном коде происходит обращение к классу Vector по полному имени:

Как добавить библиотеку (.jar файл) в проект Intellij IDEA

В этой статье мы рассмотрим правильный способ добавления внешней библиотеки ( .jar файла) в проект Intellij IDEA.

Добавляем внешний jar в проект Intellij IDEA

Если вкратце, то вам нужно добавить необходимую библиотеку в модуле зависимостей структуры проекта. А теперь подробнее:

  1. В открытом проекте, в который нужно добавить библиотеку, нажимаем File и выбираем Project Structure. или же используем горячие клавиши: Ctrl + Alt + Shift + S

1

File > Project Structure…

2. Далее выбираем пункт Modules и в нем нажимаем на закладку Dependencies . Находим там знак ‘+’ , нажимаем на него и в появившемся блоке выбираем JARs or directories.

2

Project Settings > Modules > Dependencies > знак ‘+’ > JARs or directories…

3. В появившемся окне выбираем нужный jar файл и нажимаем OK , и еще раз OK в окне подтверждения

3

И еще раз ОК

4

Выбор jar > OK > OK

4. Найти только что добавленный jar файл можно в открывающемся списке External Libraries вашего проекта Intellij IDEA.

5

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

Как с помощью maven подключить библиотеку к проекту

Спросите кого-нибудь, для чего вообще нужен Maven — 90 процентов поголовья программистов ответит, что именно для этого и будут во многом правы.

Если в случае с, например, C++ подключение библиотеки к своему проекту — это серьёзный шаг, который гарантированно усложнит сборку до такой степени, что придётся включить инструкции по подключению данной конкретной библиотеки в readme, то в случае с Java это делается легко и непринуждённо — не в последнюю очедь благодаря Maven.

Хочу отметить, что статья предназначена для тех, кто начал изучать java относительно недавно и хотя уже знает из предыдущей статьи, что такое maven — о том, что такое библиотеки, знает не очень хорошо, а как их подключать не знает вообще.

Как добавить в проект новый класс

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

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

Предлагаю присутствущим потратить минуту-другую на выражение благодарности капитану Очевидность, а после продолжить чтение.

Как добавить в проект класс, написанный кем-то другим

Ответ, вообще говоря, очевиден — надо скопировать этот класс в свой код.

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

Классы, используемые каким-то другим классом, кстати, принято называть зависимостями (dependencies), этого класса.

У такого подхода есть очевидный минус. Для каждого класса надо выискивать зависимости, а потом руками копировать их к себе. Если позже во всей этой куче кода найдётся какой-нибудь баг, то после появления фикса придётся повторить процесс заново.

Как добавить в проект класс, написанный кем-то другим, не копируя его в свой код

Во всех более-менее современных языках программирования эта проблема уже решена.

Всегда можно сказать компилятору, что классы нужно брать не только из директории с проектом, но и из других, указанных программистом директорий. В Java это делается с помощью параметра classpath.

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

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

По сравнению с предыдущим способом это заметный прогресс. Теперь нет никакой необходимости вручную отслеживать все зависимости того единственного класса, который нужен для работы вашего приложения. Для добавки багфиксов и всего такого достаточно просто скачать новую версию кода.

Вот собственно мы и подошли к ответу на вопрос, что такое библиотека.

Что такое библиотека

Библиотекой принято называть тот самый код, корневую директорию которого нужно добавить в classpath. То есть совокупность нужного нам класса и его зависимостей, а также классов, которые не являются зависимостями нужного нам класса, но содержатся в коде.

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

Ещё можно заархивировать скомпилированный код в формате zip, поменять расширение файла с архивом на jar и добавить в classpath файл уже этот файл. В контексте разработки на Java, jar файл тоже называется библиотекой.

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

Но, есть одна существенная проблема, которую jar файлы тоже никак решить не помогают.

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

Как добавить в проект библиотеку, использующую другую библиотеку

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

Может случиться так, что при обновлении какой-нибудь зависимости библиотека, класс из которой мы собираемся использовать в своём проекте, перестанет работать корректно — нам придётся внимательно следить за тем, чтобы такого не случилось и ответственно подходить к каждому обновлению, а лучше, обновлять библиотеки только если без обновления нельзя обойтись вообще.

Как убедиться, что обновление зависимости ничего не сломает

Сторого говоря — никак.

Необходимо, конечно, обновить зависимость и запустить юнит тесты. Если они не проходят, то определённо можно сказать, что что-то сломалось.

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

Но положим, что юнит тестам можно доверять. В этом случае при добавлении библиотеки придётся вручную проверить её совместимость с зависимостями запустив прилагаемые юнит тесты и делать это при каждом обновлении. Это, поверьте, мне тяжело.

Для того, чтобы избежать этой нудной и сложной работы, между программистами всего мира существует негласная договорённость. Библиотеки принято версионировать.

При создании библиотеки программист пишет её код, убеждается, что он работает корректно, а потом присваивает этому коду идентификатор, например номер, и после этого делает код доступным для других программистов чтобы они могли использовать эту библиотеку в своём коде.

Если другие программисты находят в библиотеке ошибку, то создатель библиотеки не просто молча её исправляет, а после исправления изменяет идентификатор библиотеки и теперь миру доступно две библиотеки с одинаковым названием, но разными идентификаторами.

Этот идентификатор принято называть версией библиотеки.

Версию библиотеки программист обновляет не только при исправлении ошибок, но и вообще при любом изменении.

Программисты, использующие эту стороннюю библиотеку при создании своих библиотек, или просто программ, указывают в документации не только название, но и версию, с которой их библиотека гарантировано работает корректно.

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

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

При обновлении какой-нибудь из библиотек процесс надо повторить. Это, поверьте мне, мучительно.

Как получить список всех библиотек, нужных проекту и добавить их в проект автоматически

И тут на помощь приходит Maven. Он формализует негласную договорённость между программистами и делает её гласной.

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

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

Эти вопросы в Maven успешно решены.

Как подключить библиотеку к Maven проекту

Тут всё в общем-то банально. Библиотека в понимании Maven, является артефактом, нужным для сборки программы.

У каждого артефакта, как мы помним, есть groupId, artifactId и version. Нужно только указать maven, что данный артефакт является зависимостью проекта.

Список зависимостей должен быть обернут тегом dependencies. Каждая отдельная зависимость должна быть обёрнута тегом dependency. Внутри тега dependency в тегах groupId, artifactId и version нужно указать значения соответствующих параметров.

Тут наверное надо дать пример pom.xml с добавленной библиотекой. Вот пример:

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

Вот например так:

Чтобы скомпилировать код надо написать

Этот код выведет Hello world, но, в отличии от предыдущей статьи, уже новым прогрессивным методом. С помощью библиотеки.

Вот собственно и всё.

Зависимости подключённого к проекту артефакта maven найдёт сам, сам составит список всех библиотек, необходимых проекту, включая зависимости зависимостей и зависимости зависимостей зависимостей, сам скачает их на машину, на которой происходит сборка и сам добавит их в classpath.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *