Вопрос

In a project, I'm trying to set up an automated build system for Apache Karaf (there are several commands I need to run in Karaf to set up a working environment on a fresh install). Karaf contains a batch/script file that sets several parameters, and then calls the actual Java program. Essentially, I'd like to be able to do something like:

java MyProgramClass.class < commandTextFile.txt

But when I try this it doesn't do anything. My goal is to simply copy the karaf.bat file, modify it slightly (as below) to make a "karaf-install.bat" that I can just run. The part I've modified of karaf.bat is below, and all I've done is add < "C:\commandFile.txt at the end (the following is all on one line, broken for readability):

"%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"

However, Karaf shows nothing. It just runs as if I executed it as normal; my commands are not executed. Is there a way to redirect INTO a java program from the console? Am I doing it way wrong?

For what it's worth, this will eventually be done on both Windows and OS X, but I'm focusing on Windows at the moment.

Update: turns out that this seems to work for me on OS X (Karaf struggles (by saying "Command not found: "), but I think it's because it's getting the commands before it's initialized everything), but Windows is still doesn't even get the commands. I'll poke around more.

Это было полезно?

Решение 2

I'm just going to write this issue off as Karaf weirdness, seeing as it works on OS X. I was able to work around it by using the client program that comes with Karaf by doing (on OS X in a .sh file):

"$KARAF/bin/client" "karaf_command_here"

or (on Windows in a .bat file)

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

And instead of having a list of commands to pipe into Karaf, I just made the list of commands a shell/batch script file that would call Karaf's client for each command. Not as pretty as I'd have liked it, but it got the job done.

(Note you need to start Karaf before using the client with start (and close it with stop)).

Другие советы

When piping INTO, you can read it from System.in.

Consider it a Reader, not an InputStream.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top