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

jef*_*ter 11 java javadoc maven maven-javadoc-plugin

我这样做时会出现以下错误

mvn clean deploy -DperformRelease=true
Run Code Online (Sandbox Code Playgroud)

[错误]退出代码:1 - .java:3:包javax.inject不存在
[错误] import javax.inject.Named;
[错误] ^
[错误] TransactionServiceExternalImpl.java:5:找不到符号
[错误]符号:class命名为
[ERROR] @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>
Run Code Online (Sandbox Code Playgroud)

只有一节课......

import javax.inject.Named;

@Named("transactionServiceExternal")
public class TransactionServiceExternalImpl 
{
}
Run Code Online (Sandbox Code Playgroud)

我得到了错误

  • 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>
Run Code Online (Sandbox Code Playgroud)

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

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


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


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

小智 13

在我们的项目中遇到同样的问题.很多人都有这个问题所以应该是关于maven-javadoc-plugin的问题,因为maven-javadoc-plugin打破了mvn release:在第一个回答中说明了.jira问题是http://jira.codehaus.org/browse/MJAVADOC-408.

时间解决方案:

  • 使用-Dmaven.javadoc.skip=true选项执行构建
  • 在pom.xml中添加此属性 <maven.javadoc.failOnError>false</maven.javadoc.failOnError>
  • 将maven-javadoc-plugin版本修复为你的pluginManagement部分中的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>
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

  • 值得注意的是,如果运行`mvn release:perform`,`-Dmaven.javadoc.skip = true`就无济于事. (3认同)
  • @MarcelStör这是不正确的.在发布插件的典型使用之后,您需要通过-Darguments =" - Dmaven.javadoc.skip = true"之类的内容将参数传递给它.这就是我们在这里为解决我们的版本问题所做的工作.http://maven.apache.org/maven-release/maven-release-plugin/perform-mojo.html (2认同)