如何从PowerShell调用Java程序?

时间:2015-02-24 08:44:23

标签: java windows powershell

我需要从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'.

知道怎么解决吗?

3 个答案:

答案 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 服务。我会在最后附上参考资料。

参考资料:

https://commons.apache.org/proper/commons-daemon/index.html

https://www.youtube.com/watch?v=7NjdTlriM1g