2009-07-01 17 views
3

Windows Powershell 2.0でJavaプログラムを実行するときに問題があります。 これに関するお手伝いがあれば幸いです。私は文字列が欲しい "Hello World!"メインのPowershellコンソールウィンドウに印刷します。 代わりに、別のプロセスウィンドウに印刷されて、 が開き、突然閉じます。私は、powershellに、生成されたjavaプロセスの標準出力を現在のpowershellコンソールにリダイレクトするように指示する方法を正確には知らない。基本的には、私はDOSシェルの下でjavaを実行するときと同じように動作したい。Windows PowershellからJavaプロセスを呼び出すにはどうすればよいですか?

私のテストクラスがある:

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

私のPowerShell 2.0のコードはこれです:私は、通常の DOSシェルと同じように

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

はまた、私は、そうのようにそれを実行しようとしました

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" 

、ここでは何 PCEX(http://pscx.codeplex.com)は、コマンドレットが私に語っechoargsあるので、私の引数が正しい:イムがある確信し

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 
+0

NoClassDefFoundErrorを取得しています。java.exeは、クラスがあるディレクトリ(またはパッケージ構造のルート)から呼び出されるためです。 PowerShellの部分についてはわかりません。 –

答えて

5

私はついにそれを理解しました。

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

クラス名を指定するときは、クラス名の前に絶対パスを含めることはできません。おっとっと。

関連する問題