2009-07-01 2 views
3

Ich habe Probleme beim Ausführen eines Java-Programms mit Windows PowerShell 2.0. Jede Hilfe zu diesem Thema würde sehr geschätzt werden. Ich möchte die Zeichenfolge "Hallo Welt!" um in das Powershell-Hauptfenster zu drucken. Stattdessen wird es in ein separates Prozessfenster gedruckt, das öffnet und dann plötzlich schließt. Ich weiß nicht genau, wie ich der Powershell sagen soll, das stdout des erzeugten Java-Prozesses an die aktuelle Powershell-Konsole umzuleiten. Im Grunde möchte ich Verhalten genau wie, was ich bekomme, wenn ich Java unter einer DOS-Schale laufe.Wie rufe ich einen Java-Prozess von Windows PowerShell aus auf?

Meine Testklasse ist:

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

Mein Powershell 2.0-Code ist dies:

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

Alternativ habe ich versucht, es wie so zu laufen, wie ich es bei einem normalen DOS-Shell, mit der Hoffnung, dass die Ausgabe in der gleichen Konsole angezeigt wird:

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

Es ca verwendet einen Fehler. Ich bekomme diese Fehlermeldung:

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" 

Soweit ich das beurteilen kann, mein args richtig ist, denn hier ist das, was die PCEX (http://pscx.codeplex.com) EchoArgs Cmdlets sagt mir:

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> 

Im überzeugt, dass es eine Weg, dies zu Arbeit zu bekommen, weil dieser Code funktioniert:

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

auch dies funktioniert:

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

Sie erhalten den NoClassDefFoundError, weil java.exe erwartet, aus dem Verzeichnis aufgerufen zu werden, in dem sich die Klasse befindet (oder der Stamm der Paketstruktur). Ich weiß jedoch nichts über den PowerShell-Teil. –

Antwort

5

Ich habe es endlich herausgefunden. Es war der kleinste Tippfehler:

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

wenn der Klassennamen kann es nicht den absoluten Pfad umfasst die Klassennamen voranstellen. Hoppla.

Verwandte Themen