我正在将一个java项目迁移到Maven中,我们正在使用Appassembler Maven插件(版本1.3)来生成shell启动脚本。我的问题是如何重定向标准输出和/或java程序的输出?Appassembler的pom.xml配置
<program>
<mainClass>com.mycompany.app.App</mainClass>
<commandLineArguments>
<commandLineArgument>arg1</commandLineArgument>
<commandLineArgument>arg2</commandLineArgument>
</commandLineArguments>
<name>app</name>
</program>
生成:
exec "$JAVACMD" $JAVA_OPTS
$EXTRA_JVM_ARGUMENTS
-classpath "$CLASSPATH"
-Dapp.name="app"
-Dapp.pid="$$"
-Dapp.repo="$REPO"
-Dbasedir="$BASEDIR"
com.mycompany.app.App
arg1 arg2 "$@"
参数占位符($@)是开始脚本中最后生成的标记。
找到了解决这个问题的方法。幸运的是,参数占位符与生成的命令行参数在同一行。那么这个pom。xml配置:
<commandLineArguments>
<commandLineArgument>"$@"</commandLineArgument>
<commandLineArgument>>>out.log</commandLineArgument>
<commandLineArgument>2>&1</commandLineArgument>
<commandLineArgument>#</commandLineArgument>
</commandLineArguments>
将生成以下脚本:
....
com.mycompany.app.App
"$@" >>out.log 2>&1 # "$@"
Hash在bash中是注释,所以最后一个参数占位符将被忽略,这个hack将执行重定向工作。