Maven和JavaDoc:安装其他(生成的)文件

时间:2014-10-26 20:28:52

标签: java maven javadoc

我的项目可以从源代码中自动生成一些额外的帮助文件。

如何让maven将这些文件安装到生成的JavaDoc包中?

我无法找到如何让Maven:

  1. 运行一些类来生成其他文档,例如:编译并启动src/main/java/mypackage/ListOptions.java又名mypackage.ListOptions以生成所有可用选项/模块/示例/等的列表。

  2. 安装输出文件(我只能让Maven将文件从src/main/javadoc/resources安装到site/apidocs/resources子文件夹中;但我希望此文档存在于顶级site/apidocs文件夹;更确切地说,我根本不关心site部分,而是关注mypackage-0.1.0-SNAPSHOT-javadoc.jar中的完整文档;包括从javadoc链接的非Javadoc生成的辅助信息。

  3. 最小示例 - maven的插件配置:

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-javadoc-plugin</artifactId>
                <version>2.9.1</version>
                <executions>
                    <execution>
                        <id>attach-javadocs</id>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <docfilessubdirs>true</docfilessubdirs>
                </configuration>
            </plugin>
    

    目录布局:

    ./pom.xml
    ./src/main/java/foobar/GenerateNonstatic.java
    ./src/main/javadoc/staticfile.js
    ./src/main/javadoc/resources/insubfolder.png
    

    mvn package./target/apidocs./target/foobar-0.0.1-SNAPSHOT-javadoc.jar中生成:javadoc。文件target/apidocs/resources/insubfolder.png最终位于文件夹target/apidocs/resources(以及.jar),但未安装staticfile.js

    如何运行GenerateNonstatic.java让javadoc .jar中包含的输出对我来说还不清楚。我没有看到一个拥有exec的钩子:exec它在 javadoc后运行,而 ./target/foobar-0.0.1-SNAPSHOT-javadoc.jar之前构建 ...

4 个答案:

答案 0 :(得分:2)

埃里克,

如果您对修改javadoc可执行文件感到不舒服,另一个选择是将您的javadoc调用拆分为两个单独的步骤(javadoc和jar),并通过<phase>标记操作Maven构建生命周期来在它们之间进行调用:

  • 阶段:generate-sources =&gt;行家-Javadoc的插件:javadoc的
  • 阶段:compile =&gt; EXEC-行家-插件:JAVA
  • 阶段:package =&gt;行家-Javadoc的插件:罐

注意:使用exec:java,而不是exec:exec来运行java类

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-javadoc-plugin</artifactId>
        <version>2.9.1</version>
        <executions>
            <execution>
                <id>generate-javadocs</id>
                <phase>generate-sources</phase>
                <goals>
                    <goal>javadoc</goal>
                </goals>
            </execution>
            <execution>
                <id>attach-javadocs</id>
                <phase>package</phase>
                <goals>
                    <goal>jar</goal>
                </goals>
            </execution>
        </executions>
    </plugin>

    <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>exec-maven-plugin</artifactId>
        <version>1.3.2</version>
        <executions>
            <execution>
                <id>generate-nonstatic-javadocs</id>
                <phase>compile</phase>
                <goals>
                    <goal>java</goal>
                </goals>
                <configuration>
                    <mainClass>foobar.GenerateNonstatic</mainClass>
                </configuration>
            </execution>
       </executions>
    </plugin>

答案 1 :(得分:1)

长话短说。 javadoc:javadocjavadoc:jar mojos都有其缺点。第一个是建立用于报告的javadoc;后者将构建javadoc(进入不同的目录)并生成一个jar包。

由于这一点,一些建议的答案效果不佳 - 他们会两次执行javadoc。

但我注意到 javadoc并不关心文件夹是否已存在或包含文件

所以我的解决方案很简单:在prepare-package中生成所需的其他文件,常规的javadoc:jar任务会添加常规的javadoc并很好地保护它。

只要您不打算修改由javadoc 生成的文件,这将会有效<(我很幸运,不是 - 我只是添加其他文档。

结果pom.xml是这样的:

<plugins>
    <!-- copy additional javadoc resources -->
    <plugin>
        <artifactId>maven-resources-plugin</artifactId>
        <version>2.7</version>
        <executions>
        <execution>
            <id>copy-resources</id>
            <phase>prepare-package</phase>
            <goals>
                <goal>copy-resources</goal>
            </goals>
            <configuration>
        <outputDirectory>${project.build.directory}/apidocs</outputDirectory>
            <resources>
            <resource>
                <directory>${basedir}/src/main/javadoc</directory>
                <excludes>
                <!-- overview.html is integrated by javadoc -->
                <exclude>${basedir}/src/main/javadoc/overview.html</exclude>
                </excludes>
            </resource>
            </resources>
            </configuration>
        </execution>
        </executions>
    </plugin>
    <!-- Generate additional files for javadoc -->
    <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>exec-maven-plugin</artifactId>
        <version>1.3.2</version>
        <executions>
            <execution>
                <id>generate-extra-javadoc</id>
                <phase>prepare-package</phase>
                <goals>
                       <!-- java is okay, but you only can have one -->
                    <goal>exec</goal>
                </goals>
                <configuration>...</configuration>
            </execution>
        </executions>
    </plugin>
    <!-- Build JavaDoc -->
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-javadoc-plugin</artifactId>
        <version>2.10.1</version>
        <executions>
            <execution>
                <id>attach-javadocs</id>
                <phase>package</phase>
                <goals>
                    <goal>jar</goal>
                </goals>
            </execution>
        </executions>
    </plugin>

答案 2 :(得分:0)

回答第一个问题:使用Exec-Maven-Plugin运行命令行命令或使用Maven-Ant-Plugin并嵌入自定义任务。

答案 3 :(得分:0)

埃里克,

你的榜样确实很有帮助。在提出问题时,请尽量提供具体的例子。

最简单的方法是编写自己的Alternate Javadoc tool并通过<javadocExecutable>标记将其传递给Maven。此示例来自上面的链接:

<project>
  ...
  <reporting> (or <build>)
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-javadoc-plugin</artifactId>
        <version>2.10.1</version>
        <configuration>
          <javadocExecutable>C:\jdk1.6.0\bin\javadoc.exe</javadocExecutable>
          ...
        </configuration>
      </plugin>
      ...
    </plugins>
  </reporting> (or </build>)
  ...
</project>

希望有所帮助。