jeff porter
jeff porter

Reputation: 6620

Javadoc generation failed : ClassCastException: com.sun.tools.javadoc.ClassDocImpl cannot be cast to com.sun.javadoc.AnnotationTypeDoc

I'm getting the following error when I do

mvn clean deploy -DperformRelease=true

[ERROR] Exit code: 1 - .java:3: package javax.inject does not exist
[ERROR] import javax.inject.Named;
[ERROR] ^
[ERROR] TransactionServiceExternalImpl.java:5: cannot find symbol
[ERROR] symbol: class Named
[ERROR] @Named("transactionServiceExternal")
[ERROR] ^
[ERROR] java.lang.ClassCastException: com.sun.tools.javadoc.ClassDocImpl cannot be cast to com.sun.javadoc.AnnotationTypeDoc

The POM is this...

<groupId>com.xxx</groupId>
<artifactId>ts-impl/artifactId>
<version>2.4.0-SNAPSHOT</version>

<dependencies>
    <dependency>
        <groupId>javax.inject</groupId>
        <artifactId>javax.inject</artifactId>
        <version>1</version>
    </dependency>
</dependencies>

There is only one class...

import javax.inject.Named;

@Named("transactionServiceExternal")
public class TransactionServiceExternalImpl 
{
}

I get the error with

But NOT with...

Anyone have any ideas?

Notes: Apache Maven 3.0.4 (r1232337; 2012-01-17 08:44:56+0000)


I now know that the reason is that the Maven Javadoc Plugin has changed from 2.9.1 to 2.10. and this is the cause of the problem.

I can see this warning...

[WARNING] 'build.plugins.plugin.version' for org.apache.maven.plugins:maven-javadoc-plugin is missing. [WARNING] 'build.plugins.plugin.version' for org.apache.maven.plugins:maven-deploy-plugin is missing.

By setting the following in my pom....

<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>
     </plugin>

I can fix the version back to the last release.

I will raise a bug with the Maven Javadoc creators.


http://jira.codehaus.org/browse/MJAVADOC-407


On a side note: you can clone the SVN repo for version 2.9.1, update the pom to 2.10.1, do a mvn install to put it in you M2 folder. You should be up and working again, you just need to remove this tmp version when the real release comes out.

Upvotes: 11

Views: 4599

Answers (6)

Thenanox
Thenanox

Reputation: 156

Were having same problems in our projects. Theres a lot of people having this problem so should be a issue regarding maven-javadoc-plugin as maven-javadoc-plugin breaks mvn release:perform stated in first answer. The jira issue is http://jira.codehaus.org/browse/MJAVADOC-408.

Temporal solutions:

  • Execute build with -Dmaven.javadoc.skip=true option
  • Add this property in pom.xml <maven.javadoc.failOnError>false</maven.javadoc.failOnError>
  • Fix maven-javadoc-plugin version to 2.9.1 in your pluginManagement section like
<pluginManagement>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-javadoc-plugin</artifactId>
      <version>2.9.1</version>
    </plugin>
  </plugins>
</pluginManagement>

I hope issue is fixed soon.

Update According to Noremac in comments, if you are using release plugin and want to pass arguments to it, the right way to do it is -Darguments="-Dmaven.javadoc.skip=true".

Ill keep the other way in my answer, because this is happening in any maven build that is using javadoc.

Update 2 Also TheConstructor in comments says that 2.10.1 version fix the problem. Im not able to check it out.

Upvotes: 13

Chetan Shirke
Chetan Shirke

Reputation: 904

Use following plugin to generate java docs.

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-javadoc-plugin</artifactId>
            <executions>
                <execution>
                    <id>attach-javadocs</id>
                    <goals>
                        <goal>jar</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
    </build>

Upvotes: 0

Brant Martens
Brant Martens

Reputation: 53

This somewhat worked for me, I had to add the plugin this way since we already had other plugins set for builds. Note I removed our other plugins from the example below:

<build>     
    <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-javadoc-plugin</artifactId>
          <version>2.9.1</version>
        </plugin>
    </plugins>
</build>

Upvotes: 1

burtsevyg
burtsevyg

Reputation: 4076

add this to parent pom:

<build>
...
<pluginManagement>
  <plugins>
    <plugin>
      <artifactId>maven-javadoc-plugin</artifactId>
      <version>2.9.1</version>
    </plugin>
  </plugins>
</pluginManagement>
...
<build>

solve problem

Upvotes: 0

Jiong Fu
Jiong Fu

Reputation: 21

We have the same problem and we temporarily solved this issue by explicitly specify Maven Javadoc Plugin version to 2.9.1

Upvotes: 2

burtsevyg
burtsevyg

Reputation: 4076

From jira http://jira.codehaus.org/browse/MJAVADOC-407:

build classes (including 3rd-parties dependencies) are not on javadoc classpath anymore

But if I add dependecies to maven-javadoc-plugin:

...
    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <artifactId>maven-javadoc-plugin</artifactId>
                    <version>2.10</version>
                    <dependencies>
                        <dependency>
                            <groupId>org.apache.cayenne</groupId>
                            <artifactId>cayenne-server</artifactId>
                            <version>3.1B2</version>
                        </dependency>
                    </dependencies>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>
...

this not help.

Upvotes: 1

Related Questions