2012-07-06 58 views
0

在一個項目中,我試圖爲Apache Karaf設置一個自動構建系統(我需要在Karaf中運行幾個命令來設置全新安裝的工作環境)。 Karaf包含一個批處理/腳本文件,它可以設置多個參數,然後調用實際的Java程序。從本質上講,我希望能夠做這樣的事情:重定向INTO Java程序?

java MyProgramClass.class < commandTextFile.txt 

但是當我嘗試這一點,什麼都不做。我的目標是簡單地複製karaf.bat文件,稍微修改它(如下所示)以創建一個可以運行的「karaf-install.bat」。我修改karaf.bat的一部分是低於,而我要做的就是在結尾處添加< "C:\commandFile.txt(以下所有內容在同一行,打破了可讀性):

"%JAVA%" %JAVA_OPTS% %OPTS% -classpath "%CLASSPATH%" 
    -Djava.endorsed.dirs="%JAVA_HOME%\jre\lib\endorsed;%JAVA_HOME%\lib\endorsed;%KARAF_HOME%\lib\endorsed" 
    -Djava.ext.dirs="%JAVA_HOME%\jre\lib\ext;%JAVA_HOME%\lib\ext;%KARAF_HOME%\lib\ext" 
    -Dkaraf.instances="%KARAF_HOME%\instances" -Dkaraf.home="%KARAF_HOME%" 
    -Dkaraf.base="%KARAF_BASE%" -Dkaraf.data="%KARAF_DATA%" 
    -Djava.util.logging.config.file="%KARAF_BASE%\etc\java.util.logging.properties" 
    %KARAF_OPTS% %MAIN% %ARGS% < "C:\commandFile.txt" 

然而,Karaf節目沒有。它就像我正常運行一樣運行;我的命令沒有執行。有沒有辦法從控制檯重定向INTO Java程序?我做錯了嗎?對於它的價值,這將最終在Windows和OS X上完成,但我現在專注於Windows。

更新:原來,這似乎爲我工作在OS X(說「找不到命令:」 Karaf鬥爭(),但我認爲這是因爲它是得到命令之前,它的初始化一切),但Windows仍然沒有得到這些命令。我會更多地探討。

+0

爲什麼需要混淆背書目錄? – 2012-07-06 21:04:59

+0

@ThorbjørnRavn Andersen:我不確定你的意思是... – Cornstalks 2012-07-06 21:05:41

+0

Ext.dir和endorsed.dir。這通常不是必需的 – 2012-07-06 21:06:57

回答

0

我只是想把這個問題寫成Karaf怪異的東西,因爲它可以在OS X上工作。我可以通過使用Karaf自帶的client程序來解決這個問題(在OS X上sh文件):

"$KARAF/bin/client" "karaf_command_here" 

或(在Windows上的.bat文件)

call "%KARAF%\bin\client.bat" "karaf_command_here" 

和而不必管的命令列表到Karaf,我只是做了命令的列表shell /批處理腳本文件,它會爲每個命令調用Karaf的client。不像我喜歡它那麼漂亮,但它完成了工作。

(注意,在使用clientstart(並用stop關閉它)之前,您需要啓動Karaf)。

1

當管道輸入時,您可以從System.in中讀取它。

考慮它是一個閱讀器,而不是InputStream。

+0

我沒有修改Java程序。相反,它是一個已經存在的Java程序,它是交互式的,並通過命令行從用戶那裏獲得輸入,我試圖做的是自動爲它提供命令。 – Cornstalks 2012-07-06 21:06:56

+0

除非它從CMD.EXE窗口讀取用戶輸入,否則不能使其工作。如果程序支持在啓動時讀取命令文件的標誌,請查閱手冊 – 2012-07-06 21:08:58

+0

它確實從命令提示符處讀取輸入。 「這是一個已經存在的Java程序,它是交互式的,並通過命令行從用戶那裏獲得輸入。「 – Cornstalks 2012-07-06 21:11:13