Краткий ответ: вы не можете.
Начиная с JDK 10, средство запуска Java работает в трех режимах: запуск файла класса, запуск основного класса файла JAR или запуск основного класса модуля,Здесь мы добавляем новый, четвертый режим: запуск класса, объявленного в исходном файле.
...
В режиме исходного файла эффект такой, как будто исходный файл скомпилирован впамяти, и первый класс, найденный в исходном файле, выполняется.Например, если файл HelloWorld.java содержит класс hello.World, то команда
java HelloWorld.java
неофициально эквивалентна
javac -d <memory> HelloWorld.java
java -cp <memory> hello.World
Любые аргументы, помещенные после имени исходного файла в исходной командной строке, передаются скомпилированному классу при его выполнении .Например, если файл Factorial.java содержит класс Factorial для вычисления факториалов его аргументов, то команда
java Factorial.java 3 4 5
неофициально эквивалентна
javac -d <memory> Factorial.java
java -cp <memory> Factorial 3 4 5
В режиме исходного файла любые дополнительные параметры командной строки обрабатываются следующим образом:
Модуль запускасканирует параметры, указанные перед исходным файлом, на предмет наличия каких-либо значимых параметров для компиляции исходного файла.Это включает в себя: --class-path, --module-path, --add-exports, --add-modules, --limit-modules, --patch-module, --upgrade-module-path и любой вариантформы этих вариантов.Он также включает новую опцию --enable-preview, описанную в JEP 12.
Не предусмотрено никаких дополнительных параметров для передачи компилятору, таких как -processor или-Werror.
...
Другими словами, существуют определенные ограничения, которые следует учитывать при работе с одиночнымисходный код Java-программ:
Нет внешних классов, только однофайловые программы - вы не можете вызывать любые другие классы в файлах, отличных от файла, который вывыполняются.
Нет доступных файлов классов - при вызове инструмента java
таким образом не получается никаких файлов *.class
, которые можно увидеть в вашемрабочий каталог.
Если существующий файл класса существует в classpath, вы вынуждены использовать его - Для файла, скажем SampleClass.java
, должен существующий классфайл, скажем, SampleClass.class
существует, вы не можете вызвать инструмент java
для запуска исходного файла в исходном файле mode.
Имя файла, а не имя класса - инструмент java
учитывает имя файла, а НЕ имя класса при выполнении исходных файлов.
Первый класс в файле, не совпадающий с именами классов файлов - загрузчик классов больше не определяет класс, который должен быть выполнен, путем сопоставления имени файла и имени класса.Первый класс в файле - это тот, который будет запущен,
Нет ограничений на общедоступные файлы в исходном файле - Хотя javac
заботится о количествеиз открытых классов в исходном файле java
не заботится.
Вы не можете передавать определенные специфичные для компилятора аргументы - такие аргументы, как -Werror
или -nowarn
, который вы можете передать javac
, не может быть передан (или признан в этом отношении) инструментом java
.