Выполнение кода Java с java.exe
запускает код синхронно , то есть в режиме блокировки . Следовательно, вызов Start-Process
не достигается до тех пор, пока сервер не выключится, что, очевидно, не является намерением.
У вас есть два основных c варианта выполнения вызова асинхронный :
- Используйте
Start-Process
для запуска команды в новом окне (только Windows):
# Opens the server in a *new window* (Windows only)
Start-Process java '-jar .\helloworld-0.0.1-SNAPSHOT.jar'
- Используйте фоновое задание или задание потока (
Start-Job
или Start-ThreadJob
[v6 +]), которое запускает команду в невидимом фоновом процессе или потоке, который вы можете контролировать и управлять с помощью командлетов *-Job
:
# Start the server in a background process.
# In PowerShell [Core] 6+ you can use the lighter-weight Start-ThreadJob cmdlet.
# Monitor it with the *-Job cmdlets, such as Receive-Job.
$jb = Start-Job { java -jar .\helloworld-0.0.1-SNAPSHOT.jar }
# Syntactically simpler PowerShell [Core] v6+ alternative:
# (A postpositional & is the same as using Start-Job.
# As of PowerShell 7.0, there is no operator for Start-ThreadJob.)
$jb = java -jar .\helloworld-0.0.1-SNAPSHOT.jar &
Используйте Receive-Job $jb
для получения вывода задания и Stop-Job $jb
для его остановки (и, следовательно, сервера).