代码之家  ›  专栏  ›  技术社区  ›  Nick Veys

捕获Ant<javadoc>任务输出

  •  4
  • Nick Veys  · 技术社区  · 15 年前

    是否可以捕获Javadoc在通过运行时打印的警告 javadoc 蚂蚁任务?我没有看到任务中的输出属性。似乎有一些警告是Checkstyle无法捕获,最好将输出插入文件中。

    看起来很奇怪,这是不可捕获的,希望我错过了一些明显的东西。

    ~*~*~*~ (答复如下)~*~*~*~

    看起来是蚂蚁<记录>这个任务正是我想要的。看见 the Ant docs .

    <target name="generate.docs">
        <record name="javadoc.log" action="start"/>
        <javadoc ... />
        <record name="javadoc.log" action="stop"/>
    <target/>
    
    3 回复  |  直到 14 年前
        1
  •  1
  •   Roboprog    15 年前

    我假设之前的重定向答案被否决,因为每次都需要通过build.xml脚本命令执行此操作。

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

    比如:

    <redirect file='foo.txt' append='true'>
      <anytag you='want' />
    </redirect>
    
        2
  •  1
  •   Art Doler    15 年前

    看起来使用 <exec> 标签( reference here

    也许值得一试 write your own task 做好这项工作;要么 <redirect> 标记为上面提到的Roboprog,或者扩展Javadoc任务。。。

        3
  •  1
  •   Yishai    15 年前

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

        4
  •  1
  •   haui    4 年前

    以防万一还有人感兴趣——蚂蚁 javadoc 任务可以很容易地通过一个选项进行改装 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);
        }
    
    }