0

在一个项目中,我正在尝试为 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"

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

无论如何,这最终将在 Windows 和 OS X 上完成,但我目前专注于 Windows。

更新:原来这似乎对我在 OS X 上工作(卡拉夫挣扎(通过说“找不到命令:”),但我认为这是因为它在初始化所有内容之前获取命令),但 Windows 仍然没有甚至得到命令。我会多打几下。

4

2 回答 2

1

管道 INTO 时,您可以从System.in.

将其视为 Reader,而不是 InputStream。

于 2012-07-06T21:03:54.323 回答
0

我只是将这个问题写成 Karaf 的怪异,因为它可以在 OS X 上运行。我可以通过使用clientKaraf 附带的程序来解决它(在 OS X 上的 .sh 文件中):

"$KARAF/bin/client" "karaf_command_here"

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

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

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

client(注意你需要在使用with之前启动 Karaf start(并用 关闭它stop))。

于 2012-08-30T22:02:19.213 回答