Статьи

JDK 11. Вывод однофайловых программ с исходным кодом Java на спину

Сборки раннего доступа JDK 11 включают в себя функцию предварительного просмотра, связанную с JEP 330 («Запуск программ с исходным кодом одного файла»).

Я уже писал о JEP 330 в постах « Шебанг приходит на Яву? »И« JEP 329 и JEP 330, предлагаемые для JDK 11 », я получаю возможность использовать эту функцию для раскрутки в этом посте благодаря сборкам JDK 11 Early Access Build .

Для этой демонстрации я использую последнюю (на момент написания статьи) версию OpenJDK JDK 11 Ранний доступ 24 .

исходный код Java одного файла

Одно из первых указаний на то, что поддержка JEP 330 включена в этот дистрибутив JDK, видно при использовании флага -help ( java -help ):

исходный код Java одного файла

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

1
2
3
4
5
6
7
8
9
Usage: java [options] <mainclass> [args...]
           (to execute a class)
   or  java [options] -jar <jarfile> [args...]
           (to execute a jar file)
   or  java [options] -m <module>[/<mainclass>] [args...]
       java [options] --module <module>[/<mainclass>] [args...]
           (to execute the main class in a module)
   or  java [options] <sourcefile> [args]
           (to execute a single source-file program)

Чтобы продемонстрировать эту функцию, я собираюсь использовать простой пример, адаптированный (очень немного) из приведенного в публикации Марио Торре от 24 мая 2018 года в списке рассылки OpenJDK jdk-dev .

helloYou.jv

1
2
3
4
5
6
7
8
9
#!/bin/java
public class Hello
{
   public static void main(final String[] args)
   {
      final String name = System.console().readLine("\nPlease enter your name: ");
      System.console().printf("Hello, %s!%n", name);
   }
}

Я назвал этот файл helloYou.jv . Обратите внимание, что это НЕ заканчивается расширением .java которым заканчиваются обычные файлы исходного кода Java, и я не сопоставил имя файла с именем класса. На самом деле, я начал имя файла со строчной буквы!

Когда я пытаюсь запустить этот файл напрямую с OpenJDK 11 EA-24, я вижу ошибку («Не удалось найти или загрузить основной класс helloYou.jv»):

исходный код Java одного файла

Эта ошибка возникает из-за того, что поддержка JEP 330 в этой ранней сборке доступа является функцией «предварительного просмотра». Следующий снимок экрана демонстрирует, что он работает, когда я --source=11 флаги --source=11 и --enable-preview в --source=11 запуска Java.

исходный код Java одного файла

Я выделил в своем посте « Шебанг приходит на Яву? »Это звучало так, как будто исходные программы с одним файлом, используемые с этой поддержкой JEP 330, не должны заканчиваться расширением .java (это расширение будет зарезервировано для традиционных исходных файлов Java). Похоже, что это тот случай, как показано на следующем снимке экрана, где я пытаюсь запустить эту функцию для того же кода, что и выше, но теперь с именем файла helloYou. java helloYou. java

исходный код одного файла

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

В этой ранней сборке доступа, если я закомментирую строку shebang, я смогу запустить единственный файл исходного кода helloYou.java (даже с расширением .java и без флага --enable-preview ).

исходный код одного файла

Если бы я попытался выполнить последний маневр с OpenJDK JDK 10, попытка запустить файл исходного кода Java, подобный только что показанному, привела бы к сообщению об ошибке, обсуждавшемуся ранее: «Ошибка: не удалось найти или загрузить основной класс helloYou.java».

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

Опубликовано на Java Code Geeks с разрешения Дастина Маркса, партнера нашей программы JCG . См. Оригинальную статью здесь: JDK 11. Вывод однофайловых программ с исходным кодом Java на спину

Мнения, высказанные участниками Java Code Geeks, являются их собственными.