Сборки раннего доступа JDK 11 включают в себя функцию предварительного просмотра, связанную с JEP 330 («Запуск программ с исходным кодом одного файла»).
Я уже писал о JEP 330 в постах « Шебанг приходит на Яву? »И« JEP 329 и JEP 330, предлагаемые для JDK 11 », я получаю возможность использовать эту функцию для раскрутки в этом посте благодаря сборкам JDK 11 Early Access Build .
Для этой демонстрации я использую последнюю (на момент написания статьи) версию OpenJDK JDK 11 Ранний доступ 24 .
Одно из первых указаний на то, что поддержка JEP 330 включена в этот дистрибутив JDK, видно при использовании флага -help
( java -help
):
Как показано на последнем изображении, «справка» начинается с оператора «использование», а последний пример в заявлении об использовании описывает, как использовать средство запуска 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»):
Эта ошибка возникает из-за того, что поддержка JEP 330 в этой ранней сборке доступа является функцией «предварительного просмотра». Следующий снимок экрана демонстрирует, что он работает, когда я --source=11
флаги --source=11
и --enable-preview
в --source=11
запуска 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, являются их собственными. |