2011-10-10 51 views
10

具体而言,我试图运行maven-javadoc插件,但每当我更改父/聚合器pom和所有孩子的版本号时,第一次运行构建它会失败,因为javadoc首先运行,并且因为尚未构建,所以无法从模块中找到任何新版本的软件包。如何执行maven插件_after_所有模块构建完成

我通常最终不得不为一个构建评论javadoc,然后在新版本的nexus中有可用包后重新添加它。但是,这可能意味着我一直在一个构建旧源代码罐上构建javadoc。

我读过关于把另一个模块的建议取决于其他的,但我不认为我可以得到一个模块来构建对等模块的javadoc。让它在父类中构建所有模块的所有javadoc,我只需要它在稍后发生。谢谢。这是我的javadoc插件配置。

    <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-javadoc-plugin</artifactId> 
        <inherited>false</inherited> 
        <executions> 
         <execution> 
          <id>generate-javadoc</id> 
          <phase>package</phase> 
          <goals> 
           <goal>aggregate</goal> 
          </goals> 
          <configuration> 
           <aggregate>true</aggregate> 
           <links> 
            <link>http://java.sun.com/javase/6/docs/api</link> 
            <link>http://java.sun.com/javaee/5/docs/api</link> 
           </links> 
           <maxmemory>512</maxmemory> 
           <doclet>org.umlgraph.doclet.UmlGraphDoc</doclet> 
           <docletArtifact> 
            <groupId>org.umlgraph</groupId> 
            <artifactId>doclet</artifactId> 
            <version>5.2</version> 
           </docletArtifact> 
           <additionalparam> 
            -inferrel -inferdep -outputencoding utf8 -hide 
            java.* -collpackages 
            java.util.* 
            -qualify -postfixpackage 
            -nodefontsize 9 -nodefontpackagesize 7 
           </additionalparam> 
          </configuration> 
         </execution> 
        </executions> 
       </plugin> 
+0

尝试阶段安装而不是执行包 –

+0

安装阶段似乎没有帮助,因为父/聚合器项目是首先在反应堆顺序中构建的,因此它的所有阶段都是在任何模块构建之前运行的。因此,无论是在第一个模块构建完成之前安装还是打包,javadoc对模块的依赖关系都不能满足,因为它们并未构建。 –

回答

0

一个办法来解决这个问题是不调用插件的javadoc在正常的Maven生命周期阶段;而是单独运行它。

具体而言,请从上述plugin定义中删除<phase>标记。

从父母运行mvn install javadoc:javadoc

这将构建并安装所有模块和父级,然后在其上运行javadoc。

+0

感谢您的回复,但不幸的是,这不是一回事。通过上面的配置,我可以在顶级目标目录中获得一个site/apidocs目录,并将所有模块javadoc放在一个位置。 如果我按照你的建议,每个模块都建立了自己的javadoc,但是并没有顶级的javadoc。 –

+0

@John。我猜'javadoc:javadoc'不会聚合。也许'javadoc:aggregate'呢? – Raghuram

+0

非常感谢回复。它的确如此,但是由于顶级pom首先在反应堆顺序中运行,其他模块都没有构建,而javadoc插件认为它们都是依赖关系,所以它断言它找不到必需的jar。我不确定在这种情况下聚合是如何工作的。有没有办法让反应堆顺序中的顶层pom LAST?如果它的第一个我不明白为什么它不会总是试图找到尚未构建的模块的工件。 –

0

您的pom的<build>部分是您的javadoc插件声明。你应该考虑把它移动到<reporting>部分看这link