Как открыть bat файл с помощью java

Обновлено: 05.07.2024

моя цель-создать .bat, который откроет cmd и выполнит мой Main.Java в командной строке. Легко, не так ли, но я запутался в том, как?

ниже я пишу шаги, которые должен выполнить мой пакетный файл

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

мое понимание до сих пор исследования:

  1. открыть редактор текста
  2. напишите код, чтобы открыть cmd (который я не уверен, как)
  3. echo javac Main.java (которая все еще нечеткая концепция для меня)
  4. echo java Main

Сохранить как: имя.летучая мышь!--1-->

любая помощь будет оценили. Благодарить вы.

3.сохранить как бла-бла.летучая мышь!--4-->

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

4 . дважды щелкните пакетный файл, нет необходимости открывать cmd явно tt откроется сам .выполнение летучей мыши

вы хотите, чтобы эти четыре строки кода в ваш бег.летучая мышь:

Я понимаю только ваш вопрос? Тебе нужно.файл bat для компиляции и выполнения файлов классов java?

Если это a .Bat-файл. вы можете просто дважды щелкнуть.

и в вашем .bat файл, вам просто нужно javac и главный.java ((убедитесь, что ваша летучая мышь имеет путь к ur Main.Ява) java Main

Если вы хотите, чтобы эхо-предупреждения компиляции/заявления, что нужно что-то еще. Но поскольку вы хотите, чтобы это было автоматизировано, возможно, Вам в конечном итоге не нужно что.

создайте текстовый файл (с помощью блокнота) и введите точную строку, которую вы бы использовали для запуска файла Java с помощью командной строки. Затем измените расширение на .с битой покончено.

двойной щелчок по этому файлу запустит вашу программу java.

Я рекомендую один файл для javac, один для java, чтобы вы могли устранить неполадки, если что-то не так.

Главная "Сохранить Как".bat или любое другое имя, которое вы хотите использовать для пакетного файла

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

дважды щелкните пакетный файл, чтобы запустить Main.файл java

У меня нет JDK, установленного на моей машине, чтобы проверить это, но вот что-то, чтобы вы начали с

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

Я использую следующее, чтобы вычеркнуть javac и соответствующую java.

n1 получает имя файла (без расширения) первого аргумента, переданного в пакетный файл. Таким образом, я могу запустить его с помощью Tab completion и не беспокоиться об этом работа с любым из них .класс или. расширение java.

Так что следующий результат будет таким же:

не 100% отвечает на оригинальный вопрос плакатов, но я думаю, что это хороший следующий шаг/эволюция для простых программ javac/java.

Я также столкнулся с аналогичной ситуацией, когда мне нужен скрипт, который может позаботиться о javac, а затем java(ing) моя java-программа. Итак, я придумал этот пакетный сценарий.

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

Я только что сделал простой пакетный скрипт, который принимает имя файла в качестве аргумента, компилирует и запускает файл java с одной командой. Вот код:

Я просто сохранил это как run-java.bat и поместите его в каталог System32, чтобы я мог использовать скрипт, где захочу.

использовать команду я бы сделал:

и он будет компилировать и запускать файл. просто не забудьте оставить .расширение java при вводе имени файла (вы можете заставить его работать даже при вводе имени файла, но я новичок в batch и еще не знаю, как это сделать).

Эй, я думаю, что вы просто скопируйте скомпилированные файлы классов и скопируйте папку jre и сделайте следующее в качестве содержимого пакетного файла и сохраните все вместе любую машину windows и просто дважды щелкните

В этом уроке мы рассмотрим, как выполнять команды оболочки, файлы bat и sh на Java. Мы рассмотрим примеры для всех подходов exec() и ProcessBuilder.

Вступление

В этой статье мы рассмотрим, как мы можем использовать классы Runtime и ProcessBuilder для выполнения команд и сценариев оболочки с помощью Java.

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

Этот процесс также созрел для автоматизации. Нет необходимости запускать все вручную. Используя Java, мы можем запускать одну или несколько команд оболочки, выполнять сценарии оболочки, запускать терминал/командную строку, устанавливать рабочие каталоги и управлять переменными среды с помощью основных классов.

Время выполнения.exec()

Класс Runtime в Java-это класс высокого уровня, присутствующий в каждом отдельном приложении Java. Через него само приложение взаимодействует с окружающей средой, в которой оно находится.

Извлекая среду выполнения, связанную с нашим приложением, с помощью метода getRuntime () , мы можем использовать метод exec() для прямого выполнения команд или запуска файлов .bat /|. sh .

Метод exec() предлагает несколько перегруженных вариантов:

Стоит отметить, что эти процессы запускаются извне из интерпретатора и будут зависеть от системы.

Что также стоит отметить, так это разницу между Строковой командой и Строковой командой cmdArray[] . Они достигают одного и того же. Команда | в любом случае разбивается на массив, поэтому использование любого из этих двух должно привести к одинаковым результатам.

Вам решать, хотите ли вы использовать exec("директория/папка") или exec(новая строка[] .

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

Выполнение команды из строки

Давайте начнем с самого простого подхода из этих трех:

Запуск этого кода приведет к выполнению команды, которую мы предоставили в строковом формате. Однако мы ничего не видим, когда запускаем это.

Чтобы проверить, правильно ли это выполнено, мы захотим получить доступ к объекту process . Давайте воспользуемся BufferedReader , чтобы взглянуть на то, что происходит:

Теперь, когда мы запускаем этот метод после метода exec () , он должен дать что-то вроде:

Имейте в виду, что нам придется извлекать информацию о процессе из экземпляров Process , когда мы будем рассматривать другие примеры.

Укажите рабочий каталог

Если вы хотите запустить команду, скажем, из определенной папки, мы бы сделали что-то вроде:

Здесь мы предоставили методу exec() команду , null для новых переменных среды и новый файл () , который установлен в качестве вашего рабочего каталога.

Стоит отметить добавление cmd/c перед такой командой, как dir .

Поскольку я работаю в Windows, это открывает cmd и /c выполняет последующую команду. В данном случае это реж. .

Причина, по которой это не было обязательным для примера ping , но является обязательным для этого примера, хорошо ответил пользователь SO.

Запуск предыдущего фрагмента кода приведет к:

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

Запуск этого фрагмента кода также приведет к:

Какой из них вы хотели бы использовать, сводится только к тому, какой из них вы считаете более читабельным.

Использование Переменных Среды

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

Мы можем предоставить столько переменных среды, сколько захотим, в строковом массиве. Здесь мы только что напечатали значение var1 , используя echo .

Выполнение этого кода вернет:

Запуск файлов .bat и .sh

Иногда просто гораздо проще выгрузить все в файл и запустить этот файл вместо того, чтобы добавлять все программно.

В зависимости от вашей операционной системы вы будете использовать файлы .bat или|/. sh|/. Давайте создадим его с содержимым:

Git Essentials

Ознакомьтесь с этим практическим руководством по изучению Git, содержащим лучшие практики и принятые в отрасли стандарты. Прекратите гуглить команды Git и на самом деле изучите это!

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

Это откроет командную строку и запустит файл .bat в заданном нами рабочем каталоге.

Запуск этого кода, несомненно, приведет к:

Теперь, когда все перегруженные exec() подписи устранены, давайте рассмотрим класс ProcessBuilder и то, как мы можем выполнять команды с его помощью.

Конструктор процессов

ProcessBuilder является базовым механизмом, который выполняет команды при использовании метода Runtime.getRuntime().exec() :

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

Взглянув на то, как ProcessBuilder принимает наши входные данные из метода exec() и запускает команду, мы также получаем хорошее представление о том, как ее использовать.

Он принимает строку [] cmdarray , и этого достаточно, чтобы запустить его. В качестве альтернативы мы можем предоставить ему дополнительные аргументы, такие как String[] envp и File dir .

Давайте рассмотрим эти варианты.

ProcessBuilder: Выполнение команды из строк

Вместо того, чтобы предоставлять одну строку , такую как cmd/c dir , в этом случае нам придется разбить ее. Например, если бы мы хотели перечислить файлы в C:/Users каталог, как и раньше, мы бы сделали:

Чтобы фактически выполнить Процесс , мы запускаем команду start() и присваиваем возвращаемое значение экземпляру Процесса .

Запуск этого кода приведет к:

Однако этот подход ничем не лучше предыдущего. Что полезно в классе ProcessBuilder , так это то, что он настраивается. Мы можем устанавливать вещи программно, а не только с помощью команд.

ProcessBuilder: Укажите рабочий каталог

Вместо того, чтобы указывать рабочий каталог с помощью команды, давайте установим его программно:

Здесь мы установили рабочий каталог таким же, как и раньше, но мы удалили это определение из самой команды. Выполнение этого кода даст тот же результат, что и в предыдущем примере.

ProcessBuilder: Переменные среды

Используя методы ProcessBuilder , легко получить список переменных среды в виде Карты . Также легко установить переменные среды, чтобы ваша программа могла их использовать.

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

Здесь мы упаковали возвращенные переменные среды в Map и запустили forEach() на нем, чтобы распечатать значения на нашей консоли.

Выполнение этого кода приведет к получению списка переменных среды, имеющихся на вашем компьютере:

Теперь давайте добавим переменную среды в этот список и будем использовать ее:

Запуск этого кода приведет к:

Конечно, как только программа завершит работу, эта переменная не останется в списке.

ProcessBuilder: Запуск файлов .bat и .sh

Если вы хотите снова запустить файл, мы просто предоставим экземпляру ProcessBuilder необходимую информацию:

Выполнение этого кода приводит к открытию командной строки и выполнению файла .bat .:

Вывод

В этой статье мы рассмотрели примеры выполнения команд оболочки на Java. Для этого мы использовали классы Runtime и ProcessBuilder .

Используя Java, мы можем запускать одну или несколько команд оболочки, выполнять сценарии оболочки, запускать терминал/командную строку, устанавливать рабочие каталоги и управлять переменными среды с помощью основных классов.

Кажется, что я даже не могу получить мой пакетный файл для выполнения. У меня кончились идеи.

это то, что у меня есть в Java:

ранее у меня был файл Python Sconscript, который я хотел запустить, но поскольку это не сработало, я решил, что вызову скрипт через пакетный файл, но этот метод еще не был успешным.

иногда время процесса выполнения потока выше, чем время процесса ожидания потока JVM, это происходит, когда процесс, который вы вызываете, занимает некоторое время для обработки, используйте команду waitFor () следующим образом:

таким образом, JVM остановится до тех пор, пока процесс, который вы вызываете, не будет выполнен, прежде чем он продолжит работу со стеком выполнения потока.

для запуска пакетных файлов с помощью java, если это вы говорите.

это должно помочь.

ProcessBuilder это Java 5/6 способ запуска внешних процессов.

исполняемый файл, используемый для запуска пакетных скриптов cmd.exe использует /c флаг для указания имени пакетного файла для запуска:

теоретически вы также должны иметь возможность запускать Scons таким образом, хотя я не проверял это:

EDIT: Амара, вы говорите, что это не работает. Ошибка, которую вы указали, - это ошибка, которую вы получите при запуске Java из терминала Cygwin в окне Windows; это то, что вы делаете? Проблема в том, что Windows и Cygwin имеют разные пути, поэтому версия Windows Java не найдет исполняемый файл scons на вашем пути Cygwin. Я могу объяснить дальше, если это окажется вашей проблемой.

протестировано с jdk1.5 и jdk1. 6

это работало хорошо для меня, надеюсь, что это помогает другим тоже. чтобы получить это, я боролся больше дней. : (

У меня была та же проблема. Однако иногда CMD не удалось запустить мои файлы. Вот почему я создаю темп.летучая мышь на моем рабочем столе, рядом с этим темпом.bat собирается запустить мой файл, а затем временный файл будет удален.

Я знаю, что это больший код, однако работал для меня в 100%, когда даже во время выполнения.getRuntime().метод exec() не удалось.

Я пытаюсь открыть CMD, используя java + применяя к нему код, чтобы открыть .jar, поэтому выходные данные приложений отображаются в файле .bat. может кто-нибудь сказать мне, как это сделать?

Это код,который он получил, он действительно запускает excecute файл, но CMD не отображается.

2 ответа

У меня есть приложение stanalone с основным классом, который используется для запуска файла windows BAT, файла BAT, который вызывает другой класс java (B), класс B ссылается на так много файлов JARs и конфигурации, которые я настроил через build Path Теперь я хочу сослаться на файлы JARs и.

затем в вашей попытке/улове выполните следующие действия :

Это будет считывать выходные данные в виде буфера строка за строкой и записывать их в текстовый файл

Отредактировано: Это работает для меня:

Похожие вопросы:

Я пытаюсь запустить обычный файл .jar not runable .jar с помощью файла .bat Файл jar называется mytest.jar , и я пытаюсь выполнить его с помощью файла .bat: java -classpath mytest.jar и это не.

Я написал файл .bat, чтобы открыть Chromium portable в режиме киоска на странице, которую я хочу, как полноэкранное приложение. Это прекрасно работает. Моя проблема в том, что он не работает, если.

Я хочу запустить файл .bat , когда закрою свое приложение Java. Я пытаюсь, но когда я закрываю приложение Java, файл bat не запускается.

У меня есть приложение stanalone с основным классом, который используется для запуска файла windows BAT, файла BAT, который вызывает другой класс java (B), класс B ссылается на так много файлов JARs.

Я написал некоторый код для выполнения файла .bat . который содержит некоторые команды, такие как установка java classpath,etc ..И, наконец, есть одна команда , которая запускает файл класса Java. H.

Как выполнить файл .bat с помощью программы java? Заранее спасибо

Я немного запутался в процессе создания файла .bat приложения java . Я экспортировал исполняемый файл jar, используя IDE, скажем, Application.jar в каталоге C: . Затем я написал две строки в файле.

Я столкнулся с проблемой с файлом .bat, запущенным из веб-приложения Java. Текущая настройка на локальном компьютере: создание веб-приложения и метод содержит Process p =.


Пусть исходный файл HelloUniverse.java содержит определение класса и статичный метод main , который выводит в терминал одну строку текста:


Обычно для запуска этого класса требуется сначала скомпилировать его с помощью Java-компилятора (javac), который создаст файл HelloUniverse.class:


Затем нужно с помощью команды виртуальной машины Java (интерпретатора) запустить получившийся файл:


Тогда сначала запустится виртуалка, которая загрузит класс и исполнит код.

А если вам нужно быстро проверить фрагмент кода? Или вы новичок в Java (в данном случае это ключевой момент) и хотите поэкспериментировать с языком? Описанные два этапа могут всё усложнить.

В Java SE 11 можно напрямую запускать одиночные исходные файлы без промежуточной компиляции.

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

Профессионалы могут с помощью этих инструментов изучать нововведения в языке или тестировать незнакомые API. На наш взгляд, лучше автоматизировать многие задачи, вроде написания Java-программ в виде скриптов с последующим исполнением из оболочки ОС. В результате мы можем гибко работать с shell-скриптами и пользоваться всеми возможностями Java. Поговорим об этом подробнее во второй части статьи.

Эта прекрасная возможность Java 11 позволяет напрямую исполнять одиночный исходный файл без компилирования. Давайте обсудим.

Что вам потребуется

Для запуска кода, приведённого в статье, вам понадобится версия Java не ниже 11. На момент написания статьи текущим релизом был Java SE Development Kit 12.0.1 — финальная версия находится здесь, достаточно принять условия лицензии и кликнуть на ссылку для вашей ОС. Если хотите поэкспериментировать с самыми свежими возможностями, то можете скачать JDK 13 early access.

Обратите внимание, что сейчас также доступны релизы OpenJDK разных вендоров, в том числе AdoptOpenJDK.

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

Запускаем .java с помощью Java

Функция JEP 330 (запуск однофайловых программ с исходным кодом) появилась в JDK 11. Она позволяет напрямую исполнять исходные файлы с исходным Java-кодом, без использования интерпретатора. Исходный код компилируется в памяти, а затем исполняется интерпретатором без создания на диске .class-файла.

Однако эта функция ограничена кодом, который хранится в одном файле. Вы не можете исполнять сразу несколько исходных файлов.

Чтобы обойти это ограничение, все классы нужно определять в одном файле. Никаких ограничений на их количество нет. Кроме того, пока они находятся в одном файле, не имеет значения, являются ли они публичными или частными.

Первый класс, определённый в файле, будет считаться основным, и в него нужно поместить метод main. То есть важна очерёдность.

Первый пример

Начнём с классического простейшего примера — Hello Universe!

Мы продемонстрируем описываемую возможность на разных примерах, чтобы вы получили представление, как можно её использовать в повседневном программировании.

Создайте файл HelloUniverse.java с кодом из начала статьи, скомпилируйте и запустите получившийся class-файл. Затем удалите его, сейчас поймёте зачем:


Если теперь с помощью Java-интерпретатора вы запустите class-файл без компиляции:


то увидите тот же результат: файл будет исполнен.

То есть под капотом всё же выполняется компиляция. И в случае её ошибки мы получим уведомление об этом. Можете проверить структуру директорий и убедиться, что class-файл не генерируется, компиляция выполняется в памяти.

Теперь давайте разберёмся, как это всё устроено.

Как интерпретатор Java выполняет программу HelloUniverse

В JDK 10 модуль запуска Java может работать в трёх режимах:

  1. Исполнение class-файла.
  2. Исполнение основного класса из JAR-файла.
  3. Исполнение основного класса модуля.
  1. Исполнение класса, объявленного в исходном файле.

Система определяет ваше намерение ввести исходный файл по двум признакам:

  1. Первый элемент в командной строке не является ни опцией, ни частью опции.
  2. В строке может присутствовать опция --source <vеrsion> .

Во втором случае выбирается режим работы с исходным файлом, и первый элемент в командной строке, который не является опцией, считается исходным файлом, который нужно скомпилировать и запустить.

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

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

С помощью опции --source можно определять версию языка исходника. Об этом мы поговорим ниже.

Можно ли передавать в командной строке аргументы?

Давайте расширим нашу программу Hello Universe, чтобы она выводила персональное приветствие любому пользователю, зашедшему на InfoQ Universe:


Сохраним код в файле Greater.java. Обратите внимание, что имя файла не соответствует имени публичного класса. Это нарушает правила спецификации Java.


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

Определяем уровень исходного кода с помощью опции --source

Есть два сценария использования опции --source :

  1. Определение уровня исходного кода.
  2. Принудительный перевод runtime-среды Java в режим работы с исходным файлом.

Давайте сначала рассмотрим второй сценарий. Переименуем Greater.java просто в greater без расширения и попробуем выполнить:


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


Теперь перейдём к первому сценарию. Класс Greater.java совместим с JDK 10, поскольку содержит ключевое слово var , но не совместим с JDK 9. Изменим source на 10 :


Снова запустим предыдущую команду, но в этот раз передадим --source 9 вместо 10 :


Обратите внимание: компилятор предупреждает о том, что var стала в JDK 10 ограниченным именем типа. Но поскольку у нас язык уровня 10, компиляция продолжается. Однако возникает сбой, потому что в исходном файле нет типа с именем var .

Всё просто. Теперь рассмотрим использование нескольких классов.

Работает ли этот подход с несколькими классами?

Рассмотрим пример с двумя классами. Код проверяет, является ли заданное строковое значение палиндромом.

Вот код, сохранённый в файле PalindromeChecker.java:


Запустим снова, подставив «RaceCar» вместо «MadAm»:


Теперь подставим «Mohamed» вместо «RaceCar»:


Как видите, можно добавлять в один исходный файл сколько угодно публичных классов. Следите только за тем, чтобы основной метод был определён первым. Интерпретатор будет использовать первый класс в качестве стартовой точки для запуска программы после компилирования кода в памяти.

Можно использовать модули?

Да, никаких ограничений. Скомпилированный в памяти код запускается как часть безымянного модуля с опцией --add-modules=ALL-DEFAULT , которая даёт доступ ко всем модулям, поставляемым с JDK.

То есть код может использовать разные модули без необходимости явно определять зависимости с помощью module-info.java.


Запустим программу и получим результат:


Теперь вы можете быстро тестировать новые фичи, предоставляемые разными модулями, не создавая свой собственный модуль.

Почему скрипты так важны в Java?

Сначала давайте вспомним, что такое скрипты:

Скрипт — это программа, написанная для определённого runtime-окружения, которая автоматизирует исполнение задач или команд, которые человек может исполнять поочерёдно.

Из этого общего определения мы можем вывести простое определение скриптового языка — это язык программирования, использующий высокоуровневые конструкции для интерпретации и исполнения по одной команде (или команд) за раз.

Скриптовый язык использует серии команд, записанных в файле. Часто такие языки являются интерпретируемыми (а не компилируемыми) и придерживающимися процедурного стиля программирования (хотя некоторые скриптовые языки также обладают свойствами объектно-ориентированных языков).

В целом скриптовые языки легче в освоении и быстрее в наборе кода по сравнению с более структурированными компилируемыми языками вроде Java, C и С++. К серверным скриптовым языкам относятся Perl, PHP и Python, а на клиентской стороне — JavaScript.

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

Тем не менее, Java уже исполнилось 24 года, его использует около 10 млн разработчиков по всему миру. В последних релизах добавили ряд новых возможностей, чтобы молодым программистам было легче изучать этот язык, а также чтобы пользоваться функциями языка и API без компилирования и IDE. Например, в Java SE 9 появился инструмент JShell (REPL), который поддерживает интерактивное программирование.

А с выходом JDK 11 этот язык получил возможность поддержки скриптов, поскольку теперь вы можете исполнять код с помощью простого вызова команды java !

В Java 11 есть два основных способа использования скриптов:

  1. Прямой вызов команды java .
  2. Применение *nix-скриптов для командной строки, аналогичных Bash-скриптам.

Shebang-файлы: запускаем Java как shell-скрипт

Итак, в Java SE 11 появилась поддержка скриптов, включая традиционные shebang-файлы из мира *nix. Для их поддержки не потребовалось спецификации языка.

Запустим следующий пример в терминале, работающем под macOS Mojave 10.14.5. Но сначала определим важные правила, которым нужно следовать при создании shebang-файла:


Сохраним код в файл с именем dirlist без расширения, а затем пометим его как исполняемый: mohamed_taman:code$ chmod +x dirlist .


Запустим снова с помощью команды, которая передаёт родительскую директорию, и проверим результат.


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


Также нужно отметить: если скриптовый файл лежит в текущей директории, то вы можете выполнить его так:


А если скрипт лежит в директории, путь которой указан в пользовательском PATH, то выполнить его можно так:


И в завершение дам несколько советов, о чём нужно помнить при использовании скриптов.

Советы

  1. Некоторые опции, которые вы будете передавать в javac, могут не передаться (или не распознаться) java , например, опции -processor или -Werror .
  2. Если в classpath есть файлы .class и .java, то модуль запуска заставит вас использовать class-файл.


Обратите внимание на два файла java.java в пакете HelloUniverse и файл HelloUniverse.java в той же директории. Если вы попробуете выполнить:

Резюме

Начиная с Java SE 11 и впервые в истории программирования вы можете напрямую исполнять скрипты с Java-кодом без компилирования. Это позволяет писать скрипты на Java и исполнять их из *nix-командной строки.

Читайте также: