2017-01-07 49 views
0

所以我知道不同的操作系統需要不同的classpath分隔符。我正在運行一個Windows版本,其中CMD已被Powershell替換,這在使用分號分隔符時會導致問題。javac powershell classpath separator

我試圖運行的命令從cmd /c開始嘗試讓它在命令提示符下運行,但我認爲當PowerShell解析整個命令時,它會看到分號並認爲這是結束!

我的整個的命令是:

cmd /c javac -cp PATH1;PATH2 -d DESTINATION_PATH SOURCE_PATH

我已經使用空間,結腸和週期無濟於事嘗試。任何人都可以提出解決方案嗎?

這是我在stackoverflow上的第一個問題,希望社區能夠提供幫助,並最終幫助他人。 :)

+2

'-cp 「PATH1,PATH2」' –

回答

0

我建議你使用PowerShell

Start-Process cmd.exe -ArgumentList "/c javac -cp PATH1;PATH2 -d DESTINATION_PATH SOURCE_PATH" -NoNewWindow 
+0

你所說的 「CMD已取代」 是什麼意思? CMD適用於所有Microsoft操作系統,包括但不限於最新的「Windows 10」。 – YanivK

+0

它無法工作的機器正在使用Windows Insider程序的Windows技術預覽。我指的是[鏈接](http://www.networkworld.com/article/3143196/windows/microsoft-is-replacing-the-cmd-prompt-with-powershell.html)所以CMD是靜止的,但我相信在我的java程序中建立命令'String [] PowerShell正被用來執行它。而我的複製粘貼命令到CMD和PowerShell的結果支持。 – user2953165

+0

謝謝你的解決方案。詳細闡述PowerShell'取代'CMD。我正在考慮用最新的windows預覽版本創建的進程由java代碼創建的進程pro = Runtime.getRuntime()。exec(String [] cmdArray,String [] envp,File dir);'在PowerShell中運行not命令立即提示。雖然我最初的嘗試似乎支持這個理論,但錯誤實際上是在另一個地方。 – user2953165

0

運行javac在CMD不應該要求啓動這一進程以下列方式。只要在(可能)包含空格或特殊字符的參數周圍加引號即可。我也推薦使用call operator&)。在這種情況下它是可選的,但是如果將可執行文件放在引號中(例如,因爲可執行文件或路徑包含空格,或者您想將其放入變量中),則需要該文件。

& javac -cp "PATH1;PATH2" -d "DESTINATION_PATH" "SOURCE_PATH" 

您也可以使用splatting提供的參數:

$javac = "$env:JAVA_HOME\bin\javac.exe" 
$params = '-cp', "PATH1;PATH2", 
      '-d', "DESTINATION_PATH", 
      "SOURCE_PATH" 

& $javac @params 
+0

感謝您對於將'PATH1; PATH2'放在雙引號中的評論。這部分解決了問題。我可以從CMD中調用'javac',但是我認爲我沒有正確設置PowerShell來使用'javac'。我很確定你的噴濺解決方案可以做到這一點。 – user2953165

+0

你應該只需要一個基本設置就是在你的環境變量'JAVA_HOME'(指向安裝JDK的文件夾)和'javac.exe'(通常爲'%JAVA_HOME%\ bin')的路徑'PATH'環境變量。這兩個環境變量都會影響CMD和PowerShell,即如果您的設置在CMD中工作,它也應該在PowerShell中工作。 –