Сборки раннего доступа 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/javapublic 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, являются их собственными. |





