Керівництво по java 9 компіляція і запуск проекту

Команди java і javac рідко використовуються Java-програмістами. Такі інструменти, як Maven і Gradle роблять їх майже не потрібними. Однак Maven і Gradle до сих пір не надають повну підтримку для Java 9, тому, якщо ви хочете почати використовувати її вже зараз або просто хочете дізнатися деякі корисні тонкощі до офіційного релізу. варто навчитися викликати java. javac і jar для управління своїм кодом.
Установка Java 9
Спершу необхідно встановити Java 9. Ви можете завантажити її з сайту Oracle. але рекомендується використовувати SdkMAN !. так як в майбутньому він дозволить вам з легкістю перемикатися між різними версіями Java.
Можна встановити SdkMAN! за допомогою цієї команди:
Щоб зрозуміти, чому наш код не компілюється, необхідно зрозуміти, що таке безіменні модулі.
Будь-клас, який завантажується не з іменованого модуля, автоматично виконує частину безіменного модуля. В наведеному вище прикладі перед створенням модульного дескриптора наш код не був частиною будь-якого модуля, отже, він був асоційований з безіменним модулем. Безіменний модуль - це механізм сумісності. Простіше кажучи, це дозволяє розробнику використовувати в додатках Java 9 код, який не був модулярізірован. З цієї причини код, що відноситься до безіменного модулю, має правила схоже Java 8 і раніше: він може бачити все пакети, що експортуються з інших модулів, і всі пакети безіменного модуля.
Коли модульний дескриптор додається до модуля, його код більше не є частиною безіменного модуля і не може бачити код інших модулів, поки не імпортує їх. У разі вище модуль com.app не вимагає ніяких модулів, тому модуль бібліотеки Greeting для нього не видно. Він може бачити тільки пакети модуля java.base.
Модулі в Java 9, за винятком невловимого безіменного модуля описаного вище, повинні оголошувати, які інші модулі їм необхідні. У випадку з модулем com.app єдиною вимогою є бібліотека Greeting. Але, як ви могли здогадатися, ця бібліотека (як і інші бібліотеки, які не підтримують Java 9) не є модулем Java 9. Як же нам включити її в проект?
В такому випадку вам потрібно знати ім'я jar-файлу. Якщо у вас є залежність від бібліотеки, яка не була конвертована в модуль Java 9, вам треба знати, який jar-файл викликається для цієї бібліотеки, тому що Java 9 переведе ім'я файлу в валідний модуль.
Це називається автоматичний модуль.
Щоб дізнатися ім'я автоматичного модуля, компілятор конвертує неальфанумеріческіе, тому щось на зразок slf4j-api-1.7.25.jar перетвориться в ім'я модуля sl4j.api.
У нас є бібліотека з ім'ям lib.jar. Давайте перейменуємо jar-файл в greetings-1.0.jar:
mv libs / lib. jar libs / greetings - 1.0.jar
Це більш стандартне ім'я файлу, і тепер ми можемо сказати Java включити автоматичний модуль з прийнятним ім'ям greetings. І можемо викликати його з com.app модуля: