Compile java code windows

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

Руководство по 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 .

22 апреля в 14:00, Онлайн, До 500 ₽

Теперь создадим библиотеку 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 и ранее: он может видеть все пакеты, экспортируемые из других модулей, и все пакеты безымянного модуля.

Читайте также:  Klelam sys windows 10 как исправить

Когда модульный дескриптор добавляется к модулю, его код больше не является частью безымянного модуля и не может видеть код других модулей, пока не импортирует их. В случае выше модуль 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 :

Это более стандартное имя файла, и теперь мы можем сказать Java включить автоматический модуль с приемлемым именем greetings . И можем вызывать его из com.app модуля:

Модули не добавлены в classpath . Как и обычные jar-файлы, они используют новый флаг —module-path (-p) . Теперь мы можем скомпилировать наши модули следующей командой:

Чтобы запустить app.Main командой java мы можем использовать новый флаг —module (-m) , который принимает либо имя модуля, либо шаблон module-name/main-class :

И мы получим вывод Hi, there .

Для создания и использования app.jar в качестве исполняемого jar-файла выполните следующие команды:

Следующим шагом будет модуляризация библиотек, которые используются нашим приложением.

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

Для модуляризации библиотеки нельзя сделать ничего лучше, чем использовать jdeps — инструмент для статистического анализа, который является частью Java SE.

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

А вот результат её выполнения:

Как и ожидалось, библиотека зависит только от java.base модуля.

Мы знаем, что com.app зависит от модуля greetings . Давайте попробуем использовать jdeps , чтобы он подтвердил нам это. Для этого нужно удалить файлы module-info.calss и app.jar и затем запустить jdeps :

Хорошо, но можно лучше. Мы можем попросить jdeps автоматически сгенерировать модульный дескриптор для набора jar-файлов. Просто укажите ему, куда сохранять сгенерированные файлы (например, в папку generated-mods ), и где находятся jar-файлы:

Команда создаст два файла: generated-mods/app/module-info.java и generated-mods/greetings/module-info.java со следующим содержимым:

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

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

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

Наиболее простым способом получить список всех jar-файлов, которые используются в библиотеке, является использование скрипта Gradle. Он выведет пути локальных jar-файлов для всех зависимостей библиотек, которые вы добавите в секцию зависимостей, и скачает их, если необходимо:

Читайте также:  Кто создал ядро линукс

Если у вас нет Gradle, вы можете использовать SdkMAN! для его установки:

Для получения списка зависимостей используйте следующую команду:

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

Это файл, который jdeps выводит для javaslang.match :

Создание собственного образа среды выполнения

С помощью jlink Java-приложения могут распространяться как образы, которые не требуют установки JVM.

Следующая команда создает образ для нашего com.app модуля без оптимизации, сжатия или отладочной информации:

Меньший размер может быть достигнут использованием некоторых флагов jlink , таких как —strip-debug и —compress :

Размер пакетов можно посмотреть с помощью команды du -sh :

Для запуска приложения используйте предоставляемый лаунчер в директории bin :

Вы должны увидеть сообщение Hi there .

На этом всё. Разбор нововведений в Java 9 предлагаем прочитать в нашей статье.

Компиляция java кода из командной строки

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

Java Source и каталоги классов

Простой Java-проект содержит один каталог, внутри которого хранятся все исходные файлы. Файлы обычно хранятся не внутри исходного каталога, а в подкаталогах, соответствующих их структуре пакета. Пакеты – это просто способ сгруппировать исходные файлы, которые принадлежат друг другу. Исходный каталог часто называют src, но это не является обязательным требованием.

Например, если вы используете инструмент сборки Maven, вы, как правило, будете использовать другую структуру каталогов, где исходный код Java хранится в каталоге src/main/java(в корневом каталоге вашего проекта).

Когда вы компилируете весь исходный код в Java, компилятор создает один файл .class для каждого файла .java. .Class содержит скомпилированную версию файла .java. Байт-код для файла .java, другими словами.

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

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

Компиляция исходного кода Java

Вы можете скомпилировать исходный код Java непосредственно из вашей IDE(если вы используете IDE). Или вы можете использовать компилятор, который поставляется вместе с Java SDK. Чтобы выполнить компиляцию java кода из командной строки, сделайте следующее:

  • Откройте командную строку (cmd)
  • Перейдите в корневой каталог вашего проекта(не в исходный каталог)
  • Убедитесь, что корневой каталог проекта содержит исходный каталог и каталог классов
  • Введите команду ниже(в Windows – другие ОС будут выглядеть аналогично):

Эта команда выполняет javac(компилятор), которая скомпилирует код в каталоге src / myfirstapp. * . А даже точнее все файлы в данном каталоге.

Каталог myfirstapp – это пакет в корневом каталоге исходного кода src. Если у вас есть несколько пакетов в корневом каталоге, вам придется запускать компилятор несколько раз. Java IDE обрабатывает это автоматически. Так же как и инструменты для сборки, такие как Ant, Maven или Gradle.

Выполнение скомпилированного кода

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

Вы можете запустить любой из этих файлов .class, в котором есть метод main(). Вы можете запустить .class изнутри вашей Java IDE или из командной строки. Запуск из командной строки это выглядит так:

Флаг -cp сообщает виртуальной машине, что все ваши классы находятся в каталоге, называемом классы. Это также называется «путь к классу»(отсюда сокращение cp).

Читайте также:  Microsoft windows rpg games

Имя класса для запуска является последним аргументом в приведенной выше команде – часть myfirstapp.MyJavaApp. JVM должна знать полное имя класса(все пакеты плюс имя класса), чтобы определить, где находится соответствующий файл .class.

Когда вы запустите класс, ваша командная строка будет выглядеть примерно так(включая вывод из приложения):

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

How to Compile Java Programs through Windows CMD

Although many people compile Java programs within the IDE, the Windows command line terminal is a powerful compiling option.

When starting out with Java, many users get confused about compiling the code. Frequently, a programing IDE adds additional layers of confusion and complexity that complicates debugging and learning. Learning how to compile directly from within the Windows shell is an essential skill to master. These steps will walk you through installing the Java SDK and compiling your code from within the Windows terminal. These commands are case-sensitive.

In this screencast I walkthrough the required steps. Refer to the text and images below for more specific details.

1. First things first, you need to download the JDK from Oracle to have the latest version of Java.

2. Follow the instructions to install the JDK. It is important to make note of the path of the JDK install.

3. Create a central directory to hold all your Java files. For example, I created a folder at C:\java and placed my .java files and projects within this folder.

4. Click the Windows Start icon and search for System and hit enter. Select Advanced system settings on the left and then select Environment Variables.

5. Under System variables scroll down to the variable Path.

6. Hit Edit at the beginning of the Variable value. We need to place the path of the Java compiler into Windows’s path. The compiler should be located in the JDK bin folder. For example, from the install I recorded that my bin folder was at the following location: C:\Program Files (x86)\Java\jdk1.7.0_06\bin; but your location may be different. Be sure to include a semi-colon at the end of the string you just added. Hit OK and close this.

If this is done incorrectly, you will get the following error when attempting to compile:

‘javac’ is not recognized as an internal or external command, operable program or batch file

7. Next, we need to open a terminal window or CMD shell. Click the Windows icon and search for “CMD” then hit enter. Change to the directory of your personal java files. For example, I would input cd \java since that is the personal java folder I created above. Now our current directory within the CMD shell is c:\java.

8. Type in javac JavaFileName.java where the “JavaFileName.java” is the name of the java file you want to compile. This file can be created with any text editor or IDE and contains your actual code. After hitting the enter key, you should see a new blank line in the CMD with nothing in it Now check within your personal Java folder. If the compile was successful, you should see a new .class file.

9. To actually run the interpreter and see output type in java YourFileName without the .java extension and your program should execute. My example simply outputs some text.

Оцените статью