3

我正在将一个 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 "$@"

参数占位符 ($@) 是启动脚本中最后生成的标记。

4

1 回答 1

3

找到了解决此问题的方法。幸运的是,参数占位符与生成的命令行参数位于同一行。所以这个 pom.xml 配置:

<commandLineArguments>
    <commandLineArgument>"$@"</commandLineArgument>
    <commandLineArgument>&gt;&gt;out.log</commandLineArgument>
    <commandLineArgument>2&gt;&amp;1</commandLineArgument>
    <commandLineArgument>#</commandLineArgument>
</commandLineArguments>

将生成脚本:

....
com.mycompany.app.App \
"$@" >>out.log 2>&1 # "$@"

Hash 是 bash 中的注释,因此最后一个参数占位符将被忽略,此 hack 将完成重定向工作。

于 2013-01-18T22:10:41.657 回答