我需要从PowerShell调用java程序(jar文件)。 以下代码有效:
java -jar $cls --js $dcn --js_output_file $dco
但我需要在一个过程中运行应用程序(使用Start-Process
)。
我正在尝试以下但没有成功:
Start-Process -FilePath java -jar $cls --js $dcn --js_output_file $dco -wait -windowstyle Normal
错误:
Start-Process : A parameter cannot be found that matches parameter name 'jar'.
知道怎么解决吗?
答案 0 :(得分:13)
您需要使用powershell的以下格式:
Start-Process java -ArgumentList '-jar', 'MyProgram.jar' `
-RedirectStandardOutput '.\console.out' -RedirectStandardError '.\console.err'
您可以使用的其他选项是Start-job:
Start-Job -ScriptBlock {
& java -jar MyProgram.jar >console.out 2>console.err
}
答案 1 :(得分:0)
看起来-jar
被视为Start-Process
的参数而不是传递给java
。
虽然文档说明-ArgumentList
是可选的,但我怀疑-option
并不计算 - 输入内容。
您可能需要使用:
Start-Process -FilePath java -ArgumentList ...
例如,在Powershell ISE中,以下行提供了Java帮助(虽然很快就消失了):
Start-Process -FilePath java -argumentlist -help
但此行:
Start-Process -FilePath java -help
导致Powershell 本身抱怨-help
。
答案 2 :(得分:0)
选项 1 [使用 Start-Job ScriptBlock]
Start-Job -ScriptBlock {
& java -cp .\Runner.jar com.abc.bcd.Runner.java >console.out 2>console.err
}
if ( $? == "True")
write-host("Agent started successfully")
else if ($? == "False")
write-host("Agent did not start")
选项 2 [使用 Start-Process]
Start-Process -FilePath '.\jre\bin\java' -WindowStyle Hidden -Wait -ArgumentList "-cp .\Runner.jar com.abc.bcd.Runner"
这就是我最初使用上述两个选项的方式。
选项 3 [使用 apache-commons-daemon]
我可以推荐一个更好、更强大的替代方案。
您可以使用 apache-commons-daemon
库为您的 windows service
构建 java application
,然后非常方便地start, stop
服务。
有一个很棒的 youtube 视频,它将解释 apache commons 守护程序以及如何构建 Windows 服务。我会在最后附上参考资料。
参考资料: