Поняття бібліотеки
Бібліотеками називають окрему сукупність класів, написаних кимось іншим, що виконують певні функції та можуть бути включеними у проєкт. Раніше Ви вже познайомились з пакетами. Якщо написати один або декілька (навіть сотні) пакетів для якоїсь мети та об’єднати їх у .jar
файл (формат програм Java) (або декілька файлів), то це можна назвати бібліотекою. Вони розширюють значно можливості програмістів, однак збільшують розмір програми та можуть створювати юридичні проблеми.
Бібліотеки можна підключати до проєктів двома способами: статично і динамічно. Якщо перетворенням коду Java у байткод займається компілятор, то підключенням бібліотек займається компонувальник, або частіше кажуть англійською лінкер. Статичне підключення бібліотек лінкером полягає у вбудовуванні коду бібліотеки у код проєкту, простіше кажучи — злиття. Серед плюсів є зручність перенесення такої програми (адже вона складається з одного файлу) та відсутність залежностей (користувачу нічого не потрібно встановлювати додатково), а серед мінусів: відносно великий розмір програми та ліцензування (трошки детальніше трохи нижче). Динамічне підключення, натомість, лише прив’язує проєкт до бібліотеки, але обидві частини залишаються окремими. Тут навпаки, переваги у тому, що можна оновлювати бібліотеки, не перероблюючи програми, сама програма компактна і більшість авторів бібліотек віддають перевагу саме такому методу. Серед недоліків залишається незручність поширення програми та помилки у випадку відсутності бібліотек. Також, на операційних системах з пакетними менеджерами статичні бібліотеки можуть мати дублікати, так як кожна програма включає свою копію, а динамічні можуть “бути поділеними” між багатьма програмами, що значно економить місце на комп’ютері.
Ліцензування
Цей розділ можна пропустити, якщо Ви не плануєте створювати свої програми і ділитися ними з іншими, тому лише для власного ознайомлення.
Напевно, використовуючи комп’ютер або навіть телефон, Ви вже чули про ліцензії — юридичні угоди щодо використання програмного забезпечення. Кожна бібліотека у публічному доступі має мати ліцензію, а якщо така відсутня, слід вважати (за законами майже всіх країн), що це приватна власність під захистом закону про авторські права, тому використовувати таку бібліотеку не можна. Ліцензії часто поділяють на такі типи:
- Суспільне надбання [наприклад CC0, Unlicense]: будь-які права, жодних умов
- Дозвільні (пермісивні) [MIT, Apache]: багато прав, зазвичай за умов вказування авторів
- Копілефт [GPL, AGPL]: заборона на комерцію (пропрієтаризацію), найчастіше вимагається ділитись кодом або навіть поширювати свою програму під такою ж ліцензією
- Пропрієтарна: такі бібліотеки платні та мають суворі умови використання
Програми, які поширюються безкоштовно та з відкритим кодом і створені з використанням таких же бібліотек, називають вільним та відкритим програмним забезпеченням (FOSS). Різні бібліотеки визначають поняття похідних творів по-різному, тому важливо читати ліцензію бібліотеки перед її використанням. Однак, наприклад, GPL є дуже неоднозначною ліцензією, але більшість програмістів вважають, що згідно з нею, навіть динамічне прив’язування вважається похідною роботою, тому проєкт, що використовує GPL бібліотеку, також має бути ліцензований під GPL. LGPL є дещо “полегшеною” версією GPL, яка дозволяє динамічне прив’язування без накладення себе на весь проєкт.
Поняття модулів
Починаючи з Java (1.)9, проєкти рекомендують створювати модульними. Такі проєкти мають містити файл module-info.java
, у якому вказується назва модуля програми, які інші модулі вона потребує для роботи (це включає модулі стандартної бібліотеки Java, тобто навіть простий System.out), які модулі експортує (відкриває похідним програмам) та які інтерфейси забезпечує. Виглядає для прикладу так:
module java.sql {
requires transitive java.logging;
requires transitive java.transaction.xa;
requires transitive java.xml;
exports java.sql;
exports javax.sql;
uses java.sql.Driver;
}
Заглиблюватись у систему модулів я не буду, адже ми будемо вивчати лише одну бібліотеку, тому перейдімо до її підключення.
Підключення модулярних бібліотек
На прикладі JavaFX, бібліотеки, яку Ви будете вивчати у наступній темі, підключимо її до проєкту в IDE. Спочатку необхідно завантажити SDK — .jar файли бібліотеки — JavaFX. Зробити це можна з офіційного сайту GluonHQ:
Далі розпакуйте архів десь на диск.
IntelliJ IDEA
- Створіть новий JavaFX проєкт
- Зайдіть у Файл (File) -> Структура проєкту (Project structure) -> Бібліотеки (Libraries)
-
Натисніть ‘+’ у середньому стовпці, впишіть ім’я (JavaFX), натисніть ‘+’ у правому стовпці, виберіть шлях до папки
lib
з розпакованого архіву - Натисніть “Застосувати” (Apply), “ОК” (OK)
- Зайдіть у Запуск (Run) -> Редагувати конфігурації (Edit configurations…)
- До опцій віртуальної машини (VM options) додайте:
--module-path шлях/до/JavaFX/lib --add-modules javafx.controls,javafx.fxml
- Натисніть “Застосувати” (Apply), “ОК” (OK)
Eclipse IDE
- Зайдіть у Вікно (Window) -> Налаштування (Preferences) -> Java -> Шлях зборки (Build Path) -> Користувацькі бібліотеки (User Libraries)
-
Натисніть “Створити” (New), введіть назву, “Додати сторонні JARи” (Add External JARs), виберіть всі JAR з папки
lib
з розпакованого архіву - Натисніть “Застосувати й закрити” (Apply and Close)
- Створивши новий Java проєкт, зайдіть у Запуск (Run) -> Налаштування запуску (Run Configurations…) -> Програма Java (Java Application)
- До аргументів віртуальної машини (VM arguments) додайте:
--module-path шлях/до/JavaFX/lib --add-modules javafx.controls,javafx.fxml
- Натисніть “Застосувати” (Apply), “Закрити” (Close)