2009-07-01 6 views
3

Je rencontre des problèmes lors de l'exécution d'un programme Java avec Windows Powershell 2.0. Toute aide à ce sujet serait grandement appréciée. Je veux la chaîne "Hello World!" pour imprimer dans la fenêtre principale de la console Powershell. Au lieu de cela, il est imprimé dans une fenêtre de processus séparée qui s'ouvre puis se ferme soudainement. Je ne sais pas exactement comment dire à powershell de rediriger la stdout du processus java engendré à la console powershell actuelle. Fondamentalement, je veux un comportement juste comme ce que je reçois lors de l'exécution de Java sous un shell DOS.Comment appeler un processus Java à partir de Windows Powershell?

Ma classe de test est:

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

Code Mon PowerShell 2.0 est la suivante:

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

Sinon, j'essayé de courir comme si, comme je le ferais avec un interpréteur de commandes DOS régulière, avec l'espoir que la sortie montre dans la même console:

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

utilise une erreur Je reçois cette erreur:

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" 

Pour autant que je peux dire, mes args sont correctes, car voici ce que le PCEX (http://pscx.codeplex.com) echoargs cmdlet me dit:

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 convaincu qu'il ya un façon d'obtenir ce travail parce que ce code fonctionne:

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

de plus, cela fonctionne:

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

Vous obtenez le NoClassDefFoundError car java.exe s'attend à être invoqué à partir du répertoire dans lequel se trouve la classe (ou la racine de la structure du package). Je ne connais pas la partie PowerShell. –

Répondre

5

J'ai finalement compris. Ce fut la plus petite faute de frappe:

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

Lorsque vous spécifiez le nom de la classe, il ne peut pas inclure le chemin absolu préfixer le nom de classe. Oops.