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

Javadoc生成失败:ClassCastException:com.sun.tools.Javadoc.ClassDocImpl无法转换为com.sun.Javadoc.AnnotationTypeDoc,java,maven,javadoc,maven-javadoc-plugin,Java,Maven,Javadoc,Maven Javadoc Plugin,当我这样做时,我得到了以下错误 mvn clean deploy -DperformRelease=true [错误]退出代码:1-.java:3:package javax.inject不存在 exist[ERROR]导入javax.inject.Named[错误]^[错误] TransactionServiceExternalImpl.java:5:找不到符号 [错误]符号:名为的类[错误] @命名(“transactionServiceExternal”)[错误]^[错误] java.l

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

mvn clean deploy -DperformRelease=true
[错误]退出代码:1-.java:3:package javax.inject不存在 exist
[ERROR]导入javax.inject.Named
[错误]^
[错误] TransactionServiceExternalImpl.java:5:找不到符号
[错误]符号:名为
的类[错误] @命名(“transactionServiceExternal”)
[错误]^
[错误] 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>
我得到了错误的答案

  • jdk1.5.0_22
  • jdk1.6.0_29
  • jdk1.6.0_43
  • jdk1.6.0_43_32位
但不是与

  • jdk1.7.0_05
有人有什么想法吗

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


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

我可以看到这个警告

[警告]“org.apache.maven.plugins:maven javadoc插件”的“build.plugins.plugin.version”丢失。 [警告]'build.plugins.plugin.version'for org.apache.maven.plugins:maven deploy插件丢失

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

org.apache.maven.plugins


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

来自jira:

构建类(包括第三方依赖项)不在javadoc上 类路径了吗

但如果我向maven javadoc插件添加依赖项:

...
    <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>
...
。。。
maven javadoc插件
2.10
org.apache.cayenne
cayenne服务器
3.1B2
...

这没有帮助。

在我们的项目中也有同样的问题。有很多人都有这个问题,所以第一个答案中提到的maven javadoc插件应该是一个问题。jira的问题是

临时解决方案:

  • 使用
    -Dmaven.javadoc.skip=true
    选项执行构建
  • 将此属性添加到pom.xml
    false
  • 在插件管理部分将maven javadoc插件版本修改为2.9.1,如

org.apache.maven.plugins
maven javadoc插件
2.9.1
我希望这个问题很快得到解决

更新 根据Noremac在评论中的说法,如果您正在使用release插件并希望向其传递参数,正确的方法是-Darguments=“-Dmaven.javadoc.skip=true”

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

更新2
另外,在评论中的构建者说2.10.1版本解决了这个问题。我无法检查它。

我们也有同样的问题,我们通过明确指定Maven Javadoc插件版本为2.9.1,暂时解决了这个问题。

将此添加到父pom:

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

...
maven javadoc插件
2.9.1
...

解决问题

这对我来说有些奏效,我不得不这样添加插件,因为我们已经为构建设置了其他插件。注意:我从下面的示例中删除了其他插件:

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

org.apache.maven.plugins
maven javadoc插件
2.9.1

使用以下插件生成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>

org.apache.maven.plugins
maven javadoc插件
附加javadocs
罐子

这是截至2014-09-23的选项的一个很好的总结。我唯一能补充的就是观看/监视并投票。。或者提交一个补丁:)值得注意的是,如果运行
mvn release:perform
@MarcelStör,则
-Dmaven.javadoc.skip=true
没有帮助。这是不正确的。按照发布插件的典型用法,您需要通过-Darguments=“-Dmaven.javadoc.skip=true”之类的方式将参数传递给它。这就是我们在这里所做的,以解决我们发布版本中的问题@诺雷马克,啊,唉,唉……那些分叉的执行……完全忘记了
-Darguments
。谢谢。2.10.1可用,似乎可以解决此问题。
<build>     
    <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-javadoc-plugin</artifactId>
          <version>2.9.1</version>
        </plugin>
    </plugins>
</build>
<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>