2014-10-26 55 views
0

我的项目可以从源代码自动生成一些额外的帮助文件。Maven和JavaDoc:安装额外的(生成的)文件

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

我不能fingure如何有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生成的辅助信息)。

     <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生产:在的Javadoc和./target/apidocs./target/foobar-0.0.1-SNAPSHOT-javadoc.jar -

最少例如用于Maven插件的配置。文件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建...

+1

请出示你的pom.xml文件和目录结构表示将文档生成类是和所期望的输出位置 – 333kenshin 2014-10-27 09:52:14

+0

的文档生成类是Java源代码,'的src/main/java'在(。你不会看到我在'pom.xml'中,因为我不清楚如何配置一个'exec'任务,所以它会在javadoc中结束......)并且所需的输出位置是*'package'和'javadoc' magic用来构建'...- javadoc.jar'包。 – 2014-10-27 10:05:54

+0

@ 333kenshin我已经添加了一个最简单的例子,但我不明白这会有什么帮助。 – 2014-10-27 18:18:04

回答

0

长的故事,简短的回答。 javadoc:javadocjavadoc:jar mojos都有它们的缺点。首先是为了构建用于报告的javadoc;后者将构建javadoc(到不同的目录中)并生成一个jar包。

一些建议的答案不能正常工作,因为这样 - 它们会执行两次javadoc。

但我注意到javadoc并不在乎该文件夹是否已经存在或包含文件

所以我的解决方案很简单:在prepare-package中生成所需的附加文件,并且常规的javadoc:jar任务可以很好地添加常规javadoc和pacakges。

这将工作只要你不打算修改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> 
0

要回答你的第一个问题:运行使用exec-Maven的插件一个命令行命令或者使用Maven-Ant-Plugin并嵌入自定义任务。

0

Eric,

你的例子确实有帮助。请在提问时尽量包含具体的例子。

最简单的方法是编写自己的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> 

希望有所帮助。

1

埃里克,

如果你感到不舒服修改javadoc的可执行文件,另一个选择是通过操纵Maven构建生命周期通过掰开你的javadoc调用到2层独立的步骤(javadoc和JAR),使他们之间的通话<phase>标签:

  • 相:产生来源=>行家-Javadoc的插件:javadoc的
  • 相:编译=> EXEC-行家-插件:JAVA
  • 相:包=>行家-javadoc-插件:罐子

:使用EXEC:java的,没有高管: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> 
+0

注意:'exec:java'显然不支持多次执行。由于我有两个生成器运行,我需要使用'exec:exec'。 非常感谢您的帮助! – 2014-10-28 09:46:58

+0

尚未完全正常工作。看来,第一个目标将运行javadoc,进入报告文件夹。第二个将再次运行javadoc *,进入'target/apidocs'文件夹。我通过设置第一次运行的报告目录和第二次使用'/ bin/true'作为“javadoc可执行文件”来“破解”了这一点。这会导致警告,但建筑工程。但我现在已经解决了一个更简单的解决方案。 – 2014-10-28 10:17:25