在一个项目中,我正在尝试为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仍然没有得到命令。我会捅更多。
答案 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
关闭))。