2011-01-13 19 views
5

मैं Windows XP में Powershell के माध्यम से एक जावा प्रक्रिया चलाने के लिए कोशिश कर रहा हूँ। यहां आदेश दिया गया है:powershell जावा प्रक्रिया को चलाने समस्या

java.exe -cp .;./common.jar -Dcontext=atest1 -Dresourcepath=. DW_Install 

तो, क्लासपाथ है। और। \ common.jar (मुझे लगता है कि जावा गलत स्लैश लेता है, है ना?) दो पर्यावरण चर हैं, एक "एनेस्ट 1" दूसरा "।" और मुख्य पर निष्पादित करने के लिए कक्षा DW_Install (डिफ़ॉल्ट पैकेज में) है।

cmd.exe में यह आदेश काम करता है, लेकिन पी एस नहीं है करता है। क्या चल रहा है? सीएमडी ऐसा नहीं करता है (या इसके विपरीत) इस आदेश को पार करते हुए पीएस क्या कर रहा है?

हारून

+2

के आधार पर जब आप कहते हैं कि यह PowerShell में काम नहीं करता है, क्या वास्तव में क्या होता है? – DanielGibbs

+0

मुझे java.exe सहायता आउटपुट मिलता है, जैसा कि मैंने अभी 'जावा' या 'जावा -हेल्प' टाइप किया है। –

उत्तर

7

समस्या यह है कि किसी कारण से पी एस -Dresourcepath=. अलग ढंग से पार्स करता है cmd से है। क्या काम करता है

java -cp '.;.\common.jar' -Dcontext=atest1 "-Dresourcepath=." DW_Install 

यह कोई फर्क नहीं पड़ता जो रास्ता स्लेश चला जाता है, और यह कोई फर्क नहीं पड़ता जो एक का उपयोग करता है (' या ") उद्धरण है। हालांकि, कुछ प्रकार के उद्धरणों के साथ, कक्षापाथ से बच जाना चाहिए। पीएस दुभाषिया द्वारा क्या हो रहा है यह देखने के लिए एक अच्छा परीक्षण यह गूंजना है। निम्नलिखित:

java 
-cp 
.;.\common.jar 
-Dcontext=etaste1 
-Dresourcepath= 
. 
DW_Install 

(सूचना resourcepath और resourcepath का मूल्य एक ही लाइन पर नहीं हैं।) उत्पादन जबकि

echo java -cp '.;.\common.jar' -Dcontext=atest1 '-Dresourcepath=.' DW_Install 

रहे हैं:

echo java -cp '.;.\common.jar' -Dcontext=atest1 -Dresourcepath=. DW_Install 

निम्नलिखित उत्पादन पैदावार पैदावार निम्नलिखित उत्पादन:

java 
-cp 
.;.\common.jar 
-Dcontext=etaste1 
-Dresourcepath=. 
DW_Install 

जो हमारी पसंद के लिए बहुत अधिक है।

हालांकि मैं आप में से कोई भी पर इस चाहते हैं, मुझे आशा है कि इस पोस्ट आप में से जो कि Windows मशीनों पर जावा परियोजनाओं को तैनात करना चाहिए मदद करता है (भले ही वे किसी अन्य मंच पर कभी नहीं चलेंगे)।

5

PowerShell से बाहरी कमांड लाइन कार्यक्रमों चल रहा है क्योंकि वहाँ PowerShell कि के विभिन्न वाक्यविन्यास द्वारा मात हो दो अलग पार्स मोड कहा बाहरी प्रोग्राम को उजागर करता है कभी कभी एक सा समस्याग्रस्त है।

किसी भी मामले में, पावरहेल में कमांड चलाने के लिए . उपसर्ग (dot-"sourcing") या & ऑपरेटर का उपयोग करने की आवश्यकता है।

आप प्रत्येक पैरामीटर इसलिए की तरह, अलग चर के रूप में बाहरी कार्यक्रम के लिए पारित करके इस समाधान कर सकते हैं:

PS> $classpath = ".;./common.jar" 
PS> $env = "-Dcontext=atest1 -Dresourcepath=." 
PS> $class = "DW_Install" 

PS> . java.exe -cp $classpath $env $class 
+0

टाइपिंग '। java.exe -cp।; \ common.jar -Dcontext = atest1 -Dresourcepath =। DW_Install' और '। java.exe -cp "।। \ common.jar" -Dcontext = atest1 -Dresourcepath = "।" DW_Install' और '। java.exe -cp '।; \ common.jar' -Dcontext = atest1 -Dresourcepath = '।' DW_Install' या तो काम नहीं करते हैं। मैं java.exe प्रक्रिया में जा रहा हूं, हालांकि, पहले विकल्प के साथ, मुझे जावा उपयोग आउटपुट मिलता है। –

+1

(ए) '.' का उपयोग केवल तभी जरूरी है जब प्रोग्राम का नाम एक और पार्सिंग मोड ट्रिगर करेगा ('7za.exe' एक उदाहरण है) लेकिन तब भी आपको' & 'का उपयोग करना चाहिए, न कि' .' क्योंकि आप नहीं हैं एक बाहरी कार्यक्रम डॉट-सोर्सिंग। (बी) '$ env' चर इच्छित के रूप में काम नहीं करेगा। – Joey

+0

आप '$ env' चर के बारे में सही हैं। मुश्किल यह नहीं है? –

1

निम्नलिखित काम करना चाहिए:

java.exe -cp '.;./common.jar' -Dcontext=atest1 -Dresourcepath=. DW_Install 

मुझे लगता है कि PowerShell व्याख्या ; में क्लासपाथ कमांड डिलीमीटर के रूप में, इस प्रकार java -cp . और ./common.jar -D... चलाने की कोशिश कर रहा है।

+0

नहीं, काम नहीं करता है, हालांकि, कोशिश करें। मुझे जवाब मिल गया है, नीचे देखो। –

3

एक और उदाहरण https://gaming.stackexchange.com/questions/24543/how-do-i-change-player-name-in-minecraft-multiplayer-in-offline-mode-in-linux

function mineCraftAs { 
    Param (
     [parameter(mandatory=$true, HelpMessage="Minecraft character name." ,ValueFromPipeline=$true)] 
     [string] $name 
    ) 
    if(!(test-path $env:appdata)) { $(throw "Appdata not found at $env:appdata")} 
    $private:minecraftPath=Join-Path $env:appdata .minecraft 
    if(!(test-path $minecraftPath)) { $(throw "Minecraft not found at $minecraftpath")} 
    $private:minebinPath=join-path $minecraftPath "bin" 
    if(!(test-path $minebinPath)) { $(throw "Minecraft bin not found at $minebinPath")} 

    $minebinPath | write-debug 
    gci $minebinpath | write-debug 

    #java -Xms512m -Xmx1024m -cp "%APPDATA%/.minecraft\bin\*" -Djava.library.path="%APPDATA%\.minecraft\bin\natives" net.minecraft.client.Minecraft '"'%1'"' 

    echo java -Xms512m -Xmx1024m -cp ('"'+$minebinPath+'\*"') ('-Djava.library.path="'+$minebinPath+'\natives"') net.minecraft.client.Minecraft ($name) 

    $minecraftJob=& 'C:\Program Files (x86)\Java\jre6\bin\java.exe' -Xms512m -Xmx1024m -cp ('"'+$minebinPath+'\*"') ('-Djava.library.path="'+$minebinPath+'\natives"') net.minecraft.client.Minecraft ($name) 
} 
minecraftas newbie 
+0

जानकारी के लिए धन्यवाद! यह एक उपयोगी उदाहरण है और मेरा वोट प्राप्त करता है। –

संबंधित मुद्दे