7 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Руководство по Java 9 для тех, кому приходится работать с legacy-кодом

Записки программера

Страницы

четверг, 20 июля 2017 г.

Руководство по Java 9: компиляция и запуск проекта

Команды java и javac редко используются Java-программистами. Такие инструменты, как Maven и Gradle делают их почти не нужными. Однако Maven и Gradle до сих пор не предоставляют полную поддержку для Java 9, поэтому, если вы хотите начать использовать её уже сейчас или просто хотите узнать некоторые полезные тонкости до официального релиза, стоит научиться вызывать java , javac и jar для управления своим кодом.

Статья призвана показать примеры использования этих команд, а также то, как эти команды изменились по сравнению с прошлыми версиями Java. Дополнительно будут рассмотрены новые инструменты: jdeps и jlink . Предполагается, что вы хоть немного знакомы с предыдущими версиями команд java / javac / jar и с модульной системой Java 9.

Установка Java 9

Сперва необходимо установить Java 9. Вы можете скачать её с сайта Oracle, но рекомендуется использовать SdkMAN!, так как в будущем он позволит вам с легкостью переключаться между разными версиями Java.

Можно установить SdkMAN! с помощью этой команды:

Посмотрите, какая сборка является последней:

Затем установите Java 9:

Теперь, если у вас установлены другие версии Java, вы можете переключаться между ними с помощью команды:

Компиляция и запуск «по-старому»

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

Возьмем этот простой Java-класс:

Теперь, так как мы не использовали никаких особенностей Java 9, мы можем скомпилировать всё как обычно:

Команда создаст файл класса out/app/Main.class . Запустить его можно так же, как и в прошлых версиях:

Программа выведет Hello Java 9 .

Теперь создадим библиотеку Greeting также без особенностей Java 9, чтобы посмотреть, как это работает.

Создадим файл greeting/ser/lib/Greeting.java со следующим кодом:

Изменим класс Main для использования нашей библиотеки:

Скомпилируем эту библиотеку:

Чтобы показать, как работают оригинальные Java-библиотеки, мы превратим эту библиотеку в jar-файл без дескрипторов модулей Java 9:

Команда создаст файл libs/lib.jar , содержащий класс lib.Greeting .

Просмотреть информацию о jar-файле можно с помощью опции tf :

Команда должна вывести:

Теперь для компиляция app.Main нам необходимо указать компилятору, где найти класс lib.Greeting .

Используем для этого cp (classpath):

И то же самое для запуска программы:

Мы можем упаковать приложение в jar-файл:

И затем запустить его:

Вот так выглядит структура нашего проекта на данный момент:

Модуляризация проекта

Пока что ничего нового, но давайте начнем модуляризацию нашего проекта. Для этого создадим модульный дескриптор (всегда называется module-info.java и размещается в корневой директории src/ ):

Команда для компиляции модуля в Java 9 отличается от того, что мы видели раньше. Использование старой команды с добавлением модуля к списку файлов приводит к ошибке:

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

Любой класс, который загружается не из именованного модуля, автоматически выполняет часть безымянного модуля. В примере выше перед созданием модульного дескриптора наш код не был частью какого-либо модуля, следовательно, он был ассоциирован с безымянным модулем. Безымянный модуль — это механизм совместимости. Проще говоря, это позволяет разработчику использовать в приложениях Java 9 код, который не был модуляризирован. По этой причине код, относящийся к безымянному модулю, имеет правила сродни Java 8 и ранее: он может видеть все пакеты, экспортируемые из других модулей, и все пакеты безымянного модуля.

Читать еще:  Максимальный объем файла в fat32

Когда модульный дескриптор добавляется к модулю, его код больше не является частью безымянного модуля и не может видеть код других модулей, пока не импортирует их. В случае выше модуль com.app не требует никаких модулей, поэтому модуль библиотеки Greeting для него не виден. Он может видеть только пакеты модуля java.base .

Модули в Java 9, за исключением неуловимого безымянного модуля описанного выше, должны объявлять, какие другие модули им необходимы. В случае с модулем com.app единственным требованием является библиотека Greeting. Но, как вы могли догадаться, эта библиотека (как и другие библиотеки, не поддерживающие Java 9) не является модулем Java 9. Как же нам включить её в проект?

В таком случае вам нужно знать имя jar-файла. Если у вас есть зависимость от библиотеки, которая не была конвертирована в модуль Java 9, вам надо знать, какой jar-файл вызывается для этой библиотеки, потому что Java 9 переведёт имя файла в валидный модуль.

Это называется автоматический модуль.

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

Записки программера

Страницы

четверг, 20 июля 2017 г.

Руководство по Java 9: компиляция и запуск проекта

Команды java и javac редко используются Java-программистами. Такие инструменты, как Maven и Gradle делают их почти не нужными. Однако Maven и Gradle до сих пор не предоставляют полную поддержку для Java 9, поэтому, если вы хотите начать использовать её уже сейчас или просто хотите узнать некоторые полезные тонкости до официального релиза, стоит научиться вызывать java , javac и jar для управления своим кодом.

Статья призвана показать примеры использования этих команд, а также то, как эти команды изменились по сравнению с прошлыми версиями Java. Дополнительно будут рассмотрены новые инструменты: jdeps и jlink . Предполагается, что вы хоть немного знакомы с предыдущими версиями команд java / javac / jar и с модульной системой Java 9.

Установка Java 9

Сперва необходимо установить Java 9. Вы можете скачать её с сайта Oracle, но рекомендуется использовать SdkMAN!, так как в будущем он позволит вам с легкостью переключаться между разными версиями Java.

Можно установить SdkMAN! с помощью этой команды:

Посмотрите, какая сборка является последней:

Затем установите Java 9:

Теперь, если у вас установлены другие версии Java, вы можете переключаться между ними с помощью команды:

Компиляция и запуск «по-старому»

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

Возьмем этот простой Java-класс:

Теперь, так как мы не использовали никаких особенностей Java 9, мы можем скомпилировать всё как обычно:

Команда создаст файл класса out/app/Main.class . Запустить его можно так же, как и в прошлых версиях:

Программа выведет Hello Java 9 .

Теперь создадим библиотеку Greeting также без особенностей Java 9, чтобы посмотреть, как это работает.

Читать еще:  Работа с почтовым клиентом Mozilla Thunderbird

Создадим файл greeting/ser/lib/Greeting.java со следующим кодом:

Изменим класс Main для использования нашей библиотеки:

Скомпилируем эту библиотеку:

Чтобы показать, как работают оригинальные Java-библиотеки, мы превратим эту библиотеку в jar-файл без дескрипторов модулей Java 9:

Команда создаст файл libs/lib.jar , содержащий класс lib.Greeting .

Просмотреть информацию о jar-файле можно с помощью опции tf :

Команда должна вывести:

Теперь для компиляция app.Main нам необходимо указать компилятору, где найти класс lib.Greeting .

Используем для этого cp (classpath):

И то же самое для запуска программы:

Мы можем упаковать приложение в jar-файл:

И затем запустить его:

Вот так выглядит структура нашего проекта на данный момент:

Модуляризация проекта

Пока что ничего нового, но давайте начнем модуляризацию нашего проекта. Для этого создадим модульный дескриптор (всегда называется module-info.java и размещается в корневой директории src/ ):

Команда для компиляции модуля в Java 9 отличается от того, что мы видели раньше. Использование старой команды с добавлением модуля к списку файлов приводит к ошибке:

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

Любой класс, который загружается не из именованного модуля, автоматически выполняет часть безымянного модуля. В примере выше перед созданием модульного дескриптора наш код не был частью какого-либо модуля, следовательно, он был ассоциирован с безымянным модулем. Безымянный модуль — это механизм совместимости. Проще говоря, это позволяет разработчику использовать в приложениях Java 9 код, который не был модуляризирован. По этой причине код, относящийся к безымянному модулю, имеет правила сродни Java 8 и ранее: он может видеть все пакеты, экспортируемые из других модулей, и все пакеты безымянного модуля.

Когда модульный дескриптор добавляется к модулю, его код больше не является частью безымянного модуля и не может видеть код других модулей, пока не импортирует их. В случае выше модуль com.app не требует никаких модулей, поэтому модуль библиотеки Greeting для него не виден. Он может видеть только пакеты модуля java.base .

Модули в Java 9, за исключением неуловимого безымянного модуля описанного выше, должны объявлять, какие другие модули им необходимы. В случае с модулем com.app единственным требованием является библиотека Greeting. Но, как вы могли догадаться, эта библиотека (как и другие библиотеки, не поддерживающие Java 9) не является модулем Java 9. Как же нам включить её в проект?

В таком случае вам нужно знать имя jar-файла. Если у вас есть зависимость от библиотеки, которая не была конвертирована в модуль Java 9, вам надо знать, какой jar-файл вызывается для этой библиотеки, потому что Java 9 переведёт имя файла в валидный модуль.

Это называется автоматический модуль.

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

Java Junior. Какой набор знаний для вхождения в профессию?

Приветствую честной народ!

Интересует информация о минимальном багаже знаний для вхождения в профессию в целом и некие рекомендации в частности.

На хабре и подобных ресурсах такие темы 3+ годичной давности, интересует же актуальная информация.

1. Какой набор знаний и технологий требуется?

Читать еще:  Работа с Runtime Permissions в Android 6. Получаем разрешения программно

Я так понимаю, что в основном разработка сейчас на JavaEE, с использованием Spring+hibernate+SQL+регулярные выражения? Remote Method Invoccation, потоки насколько глубоко требуется знать?

Также надо знать git или его можно изучить уже по факту? Регламентируется ли в кампаниях, какую IDE использовать – например, если привык к Intellij Idea, потребуется ли переучиваться на Eclipse?

Насколько глубоко требуется знание SQL?

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

Сейчас читаю: Java APIs, Extensions and Libraries, 2nd Edition (2018).

3. Если есть кто из HR или видно по своим коллективам: какой возраст у соискателей на Junior позиции, после 30 реально? а после 40?)))

1 – не путай JavaEE и Spring =) хотя в в целом да, подавляющее большинство разработки на Java – это корпоративные Web приложения, и повсеместно встречаются Spring + Hibernate, а дальше уже вариации. SQL знать желательно, но не обязательно, ибо тот же Hibernate из коробки делает все за тебя. Регулярки – вкусовщина, я на своих проектах категорически против регекспа но иногда без него никуда. С многопоточкой ни разу за 5 лет не работал в том виде, в котором ее нужно было бы хоть сколько-то серьезно знать, ну не довелось.

Гит – сейчас подавляющее большинство работает в умной IDE а там все возможности гита реализованы “из коробки”, запушить сможешь нажатием 1 кнопки, а резолвить мержхелл – не твоя работа на данном этапе.

про иде – чаще всего нет, но кое-где, могут потребовать не использовать ломанного ПО, при этом покупать тебе ИДЕ не захотят, по этому будь готов либо купить сам, либо поработать в Eclipse | NetBeans

SQL как я говорил выше – это дополнительные знания, которые послужат приятным бонусом, нежели каким-то обязательным параметром.

КМК важнее
1) изучить 10-пальцевую печать, и поднять скорость где-то до 200 символов в минуту на английском
2) понять, в общих чертах, как вобще работает Java машина.
3) изучить алгоритмы и структуры данных опять же на базовом уровне, что бы просто понимать, как это усутроено

4) фреймворки изучаются достаточно быстро, и начать джуну писать на том же спринге – дело 2-х недель. Сразу оговорюсь – джун не отвечает за свой код, по этому он и джун.

2. Что почитать из комплексного, особенно по проектированию приложения, разработке классов и их структуры?
Сейчас читаю: Java APIs, Extensions and Libraries, 2nd Edition (2018).

почитаешь это лет через 5-6, когда станешь архитектором =))
сейчас почитай допустим Хорстмана (Библиотека профессионала), Блоха (Эффективное программирование) Шеффер (Spring для профессионалов) этого тебе хватит за глаза для того, что бы устроиться и начать работать.

3. Если есть кто из HR или видно по своим коллективам: какой возраст у соискателей на Junior позиции, после 30 реально? а после 40?)))

я не hr но провел более 200 технических собеседований, за последние пару лет. Джуны после 30 – редкость, но не исключение. К слову в Java я сам пришел в 32, сейчас 37.

голоса
Рейтинг статьи
Ссылка на основную публикацию
Статьи c упоминанием слов: