Javadoc生成失败:ClassCastException:com.sun.tools.javadoc.ClassDocImpl无法强制转换为com.sun.javadoc.AnnotationTypeDoc

时间:2014-09-22 10:25:16

标签: java maven javadoc maven-javadoc-plugin

当我这样做时,我收到以下错误

mvn clean deploy -DperformRelease=true
  

[ERROR]退出代码:1 - .java:3:包javax.inject没有   存在
[ERROR] import javax.inject.Named;
[ERROR] ^
[ERROR]   TransactionServiceExternalImpl.java:5:找不到符号
  [错误]符号:类命名为[错误]   @Named(“transactionServiceExternal”)
[ERROR] ^
[ERROR]   java.lang.ClassCastException:com.sun.tools.javadoc.ClassDocImpl   无法转换为com.sun.javadoc.AnnotationTypeDoc

POM就是这个......

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

只有一个班级......

import javax.inject.Named;

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

我收到

的错误
  • jdk1.5.0_22
  • jdk1.6.0_29
  • jdk1.6.0_43
  • jdk1.6.0_43_32bit

但不是......

  • jdk1.7.0_05

有人有什么想法吗?

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


我现在知道原因是Maven Javadoc插件已经从2.9.1变为2.10。 这就是问题的原因。

我可以看到这个警告......

[警告] org.apache.maven.plugins的'build.plugins.plugin.version':缺少maven-javadoc-plugin。 [警告] org.apache.maven.plugins的'build.plugins.plugin.version':缺少maven-deploy-plugin。

在我的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>

我可以将版本修复回上一版本。

我将向Maven Javadoc创建者提出一个错误。


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


旁注:您可以克隆版本2.9.1的SVN repo,将pom更新为2.10.1,执行mvn安装将其放入M2文件夹中。你应该重新开始工作,只需要在真正版本发布时删除这个tmp版本。

6 个答案:

答案 0 :(得分:13)

我们的项目遇到同样的问题。很多人都有这个问题所以应该是关于maven-javadoc-plugin的问题,如maven-javadoc-plugin breaks mvn release:perform在第一个答案中所述。 jira问题是http://jira.codehaus.org/browse/MJAVADOC-408

时间解决方案:

  • 使用-Dmaven.javadoc.skip=true选项
  • 执行构建
  • 在pom.xml <maven.javadoc.failOnError>false</maven.javadoc.failOnError>
  • 中添加此属性
  • 将xven-javadoc-plugin版本修复为插件管理部分中的2.9.1,如
<pluginManagement>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-javadoc-plugin</artifactId>
      <version>2.9.1</version>
    </plugin>
  </plugins>
</pluginManagement>

我希望问题很快得到解决。

<强>更新 根据Noremac的评论,如果您正在使用发布插件并希望将参数传递给它,正确的方法是-Darguments =&#34; -Dmaven.javadoc.skip = true&# 34 ;.

在我的回答中保持另一种方式,因为这发生在使用javadoc的任何maven构建中。

更新2 另外,评论中的TheConstructor说2.10.1版本修复了这个问题。我无法检查出来。

答案 1 :(得分:2)

我们遇到同样的问题,我们通过明确指定Maven Javadoc Plugin版本到2.9.1暂时解决了这个问题

答案 2 :(得分:1)

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

  

构建类(包括第三方依赖项)不在javadoc上   classpath再来一次

但是如果我将依赖添加到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>
...

这没有帮助。

答案 3 :(得分:1)

这对我有用,我必须以这种方式添加插件,因为我们已经为构建设置了其他插件。注意我从以下示例中删除了我们的其他插件:

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

答案 4 :(得分:0)

将此添加到父pom:

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

解决问题

答案 5 :(得分:0)

使用以下插件生成java文档。

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