2014-10-26 90 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