You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@maven.apache.org by "Andy Schlaikjer (JIRA)" <ji...@codehaus.org> on 2011/01/12 20:26:58 UTC

[jira] Commented: (MJAVADOC-286) Version 2.7 in Maven Reactor may cause infinite recursion, symptoms similar to MJAVADOC-268

    [ http://jira.codehaus.org/browse/MJAVADOC-286?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=251366#action_251366 ] 

Andy Schlaikjer commented on MJAVADOC-286:
------------------------------------------

Here's a workaround I've found useful for generating cross-linked javadoc reports for all modules in a multi-module project while avoiding infinite recursion and/or Java out of heap memory errors:

Environment:

* Java 6
* Maven 3.0.1
* maven-javadoc-plugin:2.7
* maven-site-plugin:3.0-beta-3

Project layout:

{noformat}
/                   # project root
|- pom.xml          # parent pom
|- module1/         #
|  `- pom.xml       # inherits from /pom.xml
`- module2/         #
|  `- pom.xml       # inherits from /pom.xml
`- childmulti/      # child multi-module
   |- pom.xml       # intermediate parent pom, inherits from /pom.xml
   |- module3/      #
   |  `- pom.xml    # inherits from /childmulti/pom.xml
   `- module4/      #
      `- pom.xml    # inherits from /childmulti/pom.xml
{noformat}

Within {{/pom.xml}}:

{noformat}
<project>
  ...
  <url>http://${host.name}/site/${site.name}/</url>
  ...
  <build>
    <pluginManagement>
      <plugins>
        ...
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-javadoc-plugin</artifactId>
          <version>2.7</version>
        </plugin>
        ...
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-site-plugin</artifactId>
          <version>3.0-beta-3</version>
          <configuration>
            <reportPlugins>
              <plugin>
                <artifactId>maven-javadoc-plugin</artifactId>
                <configuration>
                  <detectLinks>false</detectLinks>
                  <detectOfflineLinks>true</detectOfflineLinks>
                </configuration>
                <reports>
                  <report>javadoc</report>
                </reports>
              </plugin>

              <!-- add more report plugins here -->

            </reportPlugins>
          </configuration>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
  ...
</project>
{noformat}

Within {{/childmulti/pom.xml}}:

{noformat}
<project>
  ...
  <url>http://${host.name}/site/${site.name}/childmulti/</url>
  ...
</project>
{noformat}

Notice that I've configured maven-javadoc-plugin to use the {{javadoc:javadoc}} report goal only, not the {{javadoc:aggregator}} report goal. In addition, the {{detectOfflineLinks}} parameter has been turned on.

Using this config, if an aggregate site build is executed within the multi-module project root, the {{javadoc:javadoc}} report goal is executed independently for each module, but (due to behavior of {{detectOfflineLinks}}) each set of javadocs properly cross-references other modules' javadocs.

One note: With this setup, the {{javadoc:javadoc}} report goal tries to fetch module poms from a repository during execution, instead of accessing the copies in your working directory, so all modules must be installed prior to execution of the site reactor build:

{noformat}
$ cd /path/to/project/root/
$ mvn install
$ mvn site
{noformat}



> Version 2.7 in Maven Reactor may cause infinite recursion, symptoms similar to MJAVADOC-268
> -------------------------------------------------------------------------------------------
>
>                 Key: MJAVADOC-286
>                 URL: http://jira.codehaus.org/browse/MJAVADOC-286
>             Project: Maven 2.x Javadoc Plugin
>          Issue Type: Bug
>    Affects Versions: 2.6
>         Environment: Apache Maven 2.2.0 (r788681; 2009-06-26 15:04:01+0200)
> Java version: 1.6.0_13
> Java home: /home/mkleint/javatools/jdk1.6.0_13/jre
> Default locale: en_US, platform encoding: UTF-8
> OS name: "linux" version: "2.6.29.6-desktop-2mnb" arch: "i386" Family: "unix"
>            Reporter: Parag Mehta
>            Assignee: Vincent Siveton
>            Priority: Critical
>             Fix For: 2.6.1
>
>         Attachments: MJAVADOC-286.diff
>
>
> The getModulesLinks() method is unacceptably slow under certain conditions:
> 1. project's url is defined
> 2. one or more projects in reactor do not have any java sources and are not of "pom" packaging.
> For such projects the apidocs/ output folder is never created resulting in repeated invokation of a forked javadoc goal. It's more severe with high number of modules in reactor and high number of modules without any java sources.
> as an example checkout "hg clone https://hg.kenai.com/hg/forceten~src"
> The immediate problem is in the apidocsFile.exists() condition that re-triggers the forked invokation. The attached patch fixes that. However it looks suspicitions that the method is being called repeatedly for each module at all. Maybe the aborting condition at the start of the method body is wrong (I was not able to decypher that)
> workaround is to use 2.5 or not to specify the url in pom.xml or set the detectOfflineLinks parameter to "false".

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://jira.codehaus.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira