重定向INTO Java程序?

时间:2012-07-06 20:59:18

标签: java apache-karaf

在一个项目中,我正在尝试为Apache Karaf建立一个自动构建系统(我需要在Karaf中运行几个命令,以便在全新安装时设置工作环境)。 Karaf包含一个批处理/脚本文件,它设置了几个参数,然后调用实际的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"

然而,卡拉夫什么也没说。它只是像我正常执行一样运行;我的命令没有执行。有没有办法从控制台重定向INTO java程序?我做错了吗?

对于它的价值,这最终将在Windows和OS X上完成,但我现在专注于Windows。

更新:结果表明这似乎对我来说在OS X上有用(Karaf挣扎(通过说“找不到命令:”),但我认为这是因为它在命令初始化之前得到命令一切),但Windows仍然没有得到命令。我会捅更多。

2 个答案:

答案 0 :(得分:1)

在输入INTO时,您可以从System.in读取它。

将其视为Reader,而不是InputStream。

答案 1 :(得分:0)

我只是将这个问题写成卡拉夫的怪异,因为它适用于OS X.我能够通过使用Karaf附带的client程序来解决它(在操作系统上) .sh文件中的X):

"$KARAF/bin/client" "karaf_command_here"

或(在Windows上的.bat文件中)

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

而不是将一个命令列表输入到Karaf中,我只是将命令列表设置为shell / batch脚本文件,该文件将为每个命令调用Karaf的client。不像我喜欢的那样漂亮,但它完成了工作。

(注意您需要在client使用start之前启动Karaf(并将其与stop关闭))。