如何从Windows Powershell调用Java进程?

时间:2009-07-01 22:07:07

标签: java powershell stdout

使用Windows Powershell 2.0运行Java程序时遇到问题。 任何有关这方面的帮助将不胜感激。我想要字符串 “你好,世界!”打印到Powershell主控制台窗口。 而是将其打印到打开的单独进程窗口 然后突然关闭我不知道如何告诉powershell将生成的java进程的stdout重定向到当前的PowerShell控制台。基本上,我想要的行为就像我在DOS shell下运行java时所获得的那样。

我的测试课程是:

class HelloWorldApp { 
    public static void main(String[] args) { 
        System.out.println("Hello World!"); //Display the string. 
    } 
} 

我的PowerShell 2.0代码是这样的:

set-item -path Env:CLASSPATH -value C:\Test 
"CLASSPATH = $Env:CLASSPATH" 
[Diagnostics.Process]::Start('java.exe','-classpath $Env:CLASSPATH C:\
Test\HelloWorldApp') 

或者,我尝试像这样运行它,就像我常规的那样 DOS shell,希望输出显示在同一个控制台中:

java.exe -classpath $Env:CLASSPATH C:\Test\HelloWorldApp 

它会导致错误。我收到这个错误:

PS >C:\Test\Test.ps1 
CLASSPATH = C:\Test 
java.exe : java.lang.NoClassDefFoundError: C:\Test\HelloWorldApp 
At C:\Test\Site.ps1:3 char:5 
+ java <<<<  -classpath $Env:CLASSPATH C:\Test\HelloWorldApp 
+ CategoryInfo : NotSpecified: (java.lang.NoCla...e\HelloWorldApp: 
                               String) [], RemoteException 
+ FullyQualifiedErrorId : NativeCommandError 
Exception in thread "main" 

据我所知,我的args是正确的,因为这里是什么 PCEX(http://pscx.codeplex.com)echoargs cmdlet告诉我:

PS >echoargs java.exe -classpath $Env:CLASSPATH C:\Test\HelloWorldApp 
Arg 0 is <java.exe> 
Arg 1 is <-classpath> 
Arg 2 is <C:\Test> 
Arg 3 is <C:\Test\HelloWorldApp> 

我确信有一种方法可以让它工作,因为这段代码可以工作:

## Test.ps1
cd C:\PSJustice
java.exe -classpath . HelloWorldApp

此外,这也有效:

cd C:\
java.exe -classpath C:\Test HelloWorldApp

1 个答案:

答案 0 :(得分:5)

我终于明白了。这是最小的错字:

cd c:\
set-item -path Env:CLASSPATH -value C:\Test 
"CLASSPATH = $Env:CLASSPATH" 
java.exe -classpath $Env:CLASSPATH HelloWorldApp

指定类名时,不能包含前缀类名的绝对路径。糟糕。