gpt4 book ai didi

java - Ant 在我的 stdout 前加上 [java]

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:55:15 25 4
gpt4 key购买 nike

我有一个简单的 Java 应用程序,它是由 Ant 脚本构建和执行的。

当我在代码中说System.out.println("x")时,会有如下输出:

...
run:
[java] x
...

我想要的只是:

...
run:
x
...

没有前缀 [java]


非首屏:

我知道有开关 -emacs(愚蠢的名字,顺便说一句)。然而,这也删除了所有其他 [...] 前缀 - 在 cleancompile 等任务中。我想保留它们,并且希望在 Ant 脚本中进行更改,而不是 Ant 开关。

相关的Ant代码是:

    <target name="run" depends="jar">
<java fork="true" jar="MyCoolProgram.jar"/>
</target>

最佳答案

ANT 使用 java.lang.System.setOut/setErr 将标准输出/标准错误重定向到它自己的输出代码。但是,您可以使用 java.io.FileDescriptor.out/err 字段取回原始标准输出/错误。您将需要使用 FileOutputStream 打开这些字段,然后依次在这些字段上打开 java.io.PrintStream:

import java.io.*;
...
PrintStream out = new PrintStream(new FileOutputStream(FileDescriptor.out));
PrintStream err = new PrintStream(new FileOutputStream(FileDescriptor.err));

这将适用于任何自定义 ANT 任务,以及您启动时使用的任何 Java 代码 <java fork="false"> .因此,您可以避免此代码的前缀,同时保留它用于任何其他任务。

但是,当您使用 <java fork="true"> 启动时,那么传递给你的子进程的标准输出和标准错误都是由ANT控制的,上面的技巧是行不通的。如果您确实必须在单独的 JVM 中运行您的代码,则可以选择编写您自己的 ANT 任务来启动此代码。

另一种有效的技术是使用 System.console() 而不是 System.out() 进行输出。但是,这仅在您的 ANT 脚本以交互方式执行时有效,而不是在被调用时无效。 Hudson 构建,这同样不适用于 fork 的 JVM。

关于java - Ant 在我的 stdout 前加上 [java],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13160452/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com