捕获蚂蚁 任务输出

问题描述 投票:4回答:4

是否可以捕获通过javadoc Ant任务运行时Javadoc打印的警告?我在任务中看不到输出属性,例如一个。似乎有警告说Checkstyle不能捕获,最好将输出保留在文件中。

似乎很奇怪,这无法被捕捉,希望我缺少明显的东西。

〜*〜*〜*〜编辑(下面的答案)〜*〜*〜*〜

看来,Ant 任务正是我要寻找的。参见the Ant docs

<target name="generate.docs">
    <record name="javadoc.log" action="start"/>
    <javadoc ... />
    <record name="javadoc.log" action="stop"/>
<target/>
ant javadoc
4个回答
1
投票

看来使用<exec>标记(reference here)可能是...。这可能是一种皇家痛苦,但是可能可以执行javadoc可执行文件并重建生成javadoc所需的命令参数。 。但是,作为一个很大的招呼,它似乎只使用自然的shell重定向,因此在Win32和Linux上进行构建都需要一些特殊情况的mojo。

write your own task做这项工作可能值得;如Roboprog前面提到的<redirect>标记,或扩展Javadoc任务...


1
投票

我假设先前的重定向答案由于未声明的要求而被否决,因为每次都要通过build.xml脚本命令来执行此操作。

是的。该功能似乎不存在于任务中。一个更好的问题可能是:Ant中是否有一个任务/标签可以重定向任何嵌套标签的所有输出?这样的任务/标记将保存System.out和/或System.err,将它们设置为创建或追加到文件,然后在块末尾将其还原。

类似:

<redirect file='foo.txt' append='true'>
  <anytag you='want' />
</redirect>

1
投票

您可以使用com.sun.tools.javadoc.Main类将Javadoc作为Java类执行,调用execute方法(位于JDK附带的tools.jar中,因此可以包装一个Java类Ant Java任务调用,该任务允许重定向输出。您将不得不自己重构javadoc命令行参数,而不是像Ant任务那样精巧,但这应该可以工作。


0
投票

[如果其他人仍然有兴趣,则可以很容易地用选项javadoc改造Ant outputFile任务,以存储生成的消息,例如到文件:

public class MyJavaDoc extends org.apache.tools.ant.taskdefs.Javadoc{

    private File _outFile;

    private Writer _writer;

    /**
     * The file to write error output to.
     */
    public void setOutputFile(File outFile) {
        _outFile = outFile;
    }

    @Override
    public void execute() throws BuildException {
        if (_outFile == null) {
            throw new BuildException("Missing 'outputFile' parameter.");
        }
        try (OutputStream out = new FileOutputStream(_outFile)) {
            _writer = new OutputStreamWriter(out);
            try {
                super.execute();
            } finally {
                _writer.close();
            }
        } catch (IOException ex) {
            throw new BuildException("Cannot write error output: " + ex.getMessage(), ex);
        }
    }

    @Override
    public void log(String msg, int msgLevel) {
        if (msgLevel <= Project.MSG_WARN) {
            try {
                _writer.write(msg);
                _writer.write("\n");
            } catch (IOException ex) {
                throw new IOError(ex);
            }
        }
        super.log(msg, msgLevel);
    }

}
© www.soinside.com 2019 - 2024. All rights reserved.