Apache Ant - 带有“[java]”标签的程序输出

Apache Ant - program output accompanied by "[java]" tags

一个愚蠢的问题,但我找不到任何答案。

目前正在学习 Apache Ant,我首先制作了一个非常基本的构建文件和 java 项目,该项目将一行字符串打印到控制台。这是我使用命令

时输出的内容

ant compile jar run

PS C:\Users\zayd\Desktop\Apps\pbox> ant compile jar run
Buildfile: C:\Users\zayd\Desktop\Apps\pbox\build.xml

compile:
    [mkdir] Created dir: C:\Users\zayd\Desktop\Apps\pbox\build\classes
    [javac] C:\Users\zayd\Desktop\Apps\pbox\build.xml:9: warning: 'includeantruntime' was not set, defaulting to build.s
ysclasspath=last; set to false for repeatable builds
    [javac] Compiling 8 source files to C:\Users\zayd\Desktop\Apps\pbox\build\classes

jar:
    [mkdir] Created dir: C:\Users\zayd\Desktop\Apps\pbox\build\jar
    [jar] Building jar: C:\Users\zayd\Desktop\Apps\pbox\build\jar\Main.jar

run:
    [java] ~We'll go down in history~

BUILD SUCCESSFUL
Total time: 1 second

有没有办法删除与程序输出一起打印的“[java]”标签?

默认情况下,不,你不能。输出中的任务前缀由 Ant 的日志记录机制控制,而不是由 java 任务本身控制,因此无法更改 java 任务用法来删除此输出。

唯一的方法是编写您自己的 BuildLogger 来自定义构建事件消息,然后指示 Ant 使用此自定义记录器而不是 Ant 默认使用的 DefaultLogger。请参阅 https://ant.apache.org/manual/listeners.html(link 包含指向编写您自己的侦听器和记录器的指针)。

如果您真的打算这样做而不只是出于好奇而问这个,那么这里有一个摘自 DefaultLogger 的片段,它指出了如何使用任务名称记录构建事件消息:

/**
 * Logs a message, if the priority is suitable.
 * In non-emacs mode, task level messages are prefixed by the
 * task name which is right-justified.
 *
 * @param event A BuildEvent containing message information.
 *              Must not be <code>null</code>.
 */
public void messageLogged(BuildEvent event) {
    int priority = event.getPriority();
    // Filter out messages based on priority
    if (priority <= msgOutputLevel) {

        StringBuffer message = new StringBuffer();
        if (event.getTask() != null && !emacsMode) {
            // Print out the name of the task if we're in one
            String name = event.getTask().getTaskName();
            String label = "[" + name + "] ";

您尝试过 -emacs 命令行选项吗?

https://ant.apache.org/manual/running.html