gpt4 book ai didi

java - Maven javadoc :javadoc works but javadoc:aggregate throws errors that look like compiler errors

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:29:04 27 4
gpt4 key购买 nike

我正在尝试为多模块项目创建聚合 javadoc。该项目使用 mvn install -DskipTests 编译(我没有在我的机器上运行测试)。当我运行 mvn validate javadoc:javadoc 时,它会工作并编译每个模块\target\apidocs 目录中的所有 javadoc。然后,当我运行 mvn validate javadoc:javadoc javadoc:aggregatemvn validate javadoc:aggregate 时,中途失败,出现大约 1200 行错误。类型的一些例子是:

Failed to execute goal org.apache.maven.plugins:maven-javadoc-plugin:2.9.1:aggregate (default-cli) on project commons-superpom: An error has occurred in JavaDocs report generation:
[ERROR] Exit code: 1 - C:\workspaces\win\tfs\****\Foo.java:21: type org.springframework.context.ApplicationListener does not take parameters
[ERROR] public class Foo implements ApplicationContextAware, ApplicationListener<ContextRefreshedEvent> {
[ERROR] ^
.
.
.
C:\workspaces\win\tfs\****\test\Bar.java:52: cannot find symbol
[ERROR] symbol : class PostInsertEvent
[ERROR] location: class com.Barclass
[ERROR] public void BarFunct(PostInsertEvent event) {
[ERROR] ^
[ERROR] C:java.lang.NullPointerException
[ERROR] at com.sun.tools.javadoc.TypeMaker.getType(TypeMaker.java:67)
[ERROR] at com.sun.tools.javadoc.TypeMaker.getType(TypeMaker.java:29)
[ERROR] at com.sun.tools.javadoc.ClassDocImpl.superclassType(ClassDocImpl.java:439)
[ERROR] at com.sun.tools.doclets.internal.toolkit.util.Util.getAllInterfaces(Util.java:386)
[ERROR] at com.sun.tools.doclets.internal.toolkit.util.Util.getAllInterfaces(Util.java:424)
[ERROR] at com.sun.tools.doclets.internal.toolkit.util.ClassTree.processType(ClassTree.java:162)
[ERROR] at com.sun.tools.doclets.internal.toolkit.util.ClassTree.buildTree(ClassTree.java:114)
[ERROR] at com.sun.tools.doclets.internal.toolkit.util.ClassTree.<init>(ClassTree.java:73)
[ERROR] at com.sun.tools.doclets.internal.toolkit.AbstractDoclet.startGeneration(AbstractDoclet.java:104)
[ERROR] at com.sun.tools.doclets.internal.toolkit.AbstractDoclet.start(AbstractDoclet.java:64)
[ERROR] at com.sun.tools.doclets.formats.html.HtmlDoclet.start(HtmlDoclet.java:42)
[ERROR] at com.sun.tools.doclets.standard.Standard.start(Standard.java:23)
[ERROR] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[ERROR] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
[ERROR] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
[ERROR] at java.lang.reflect.Method.invoke(Method.java:597)
[ERROR] at com.sun.tools.javadoc.DocletInvoker.invoke(DocletInvoker.java:269)
[ERROR] at com.sun.tools.javadoc.DocletInvoker.start(DocletInvoker.java:143)
[ERROR] at com.sun.tools.javadoc.Start.parseAndExecute(Start.java:340)
[ERROR] at com.sun.tools.javadoc.Start.begin(Start.java:128)
[ERROR] at com.sun.tools.javadoc.Main.execute(Main.java:41)
[ERROR] at com.sun.tools.javadoc.Main.main(Main.java:31)

崩溃后,我父级 pom.xml 旁边的/target 目录中剩下的所有内容是 2 个文件,其中 1 个是包含 xml 文件的 javadoc-bundle-options:

<?xml version="1.0" encoding="UTF-8"?>
<javadocOptions>
<docletArtifacts>
<docletArtifact />
</docletArtifacts>
<tagletArtifacts>
<tagletArtifact />
</tagletArtifacts>
<excludePackageNames>
<excludePackageName>org.foobar.*</excludePackageName>
</excludePackageNames>
<javadocResourcesDirectory>src/main/javadoc</javadocResourcesDirectory>
</javadocOptions>

第二个是包含名为 apidocs 的文件的站点,该文件包含 3 个文件 javadoc.bat、选项和包。它们包含它们似乎包含一个批处理脚本,用于使用这些选项和那些包运行 javadoc.exe。

我复制的第一个错误是直接错误的。 ApplicationListener 是参数化的,可以根据 spring 文档获取 ContextRefreshedEvent。在第二个错误中也正确导入了 PostInsertEvent。我不知道 NullPointerException 发生在哪里。

我的 javadoc:aggregate 插件配置如下:

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>${maven-javadoc-plugin.version}</version>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>aggregate</goal>
</goals>
</execution>
</executions>
<configuration>
<excludePackageNames>org.hibernate.*;org.spring.*<-!-- ;com.***.hibernate.audit --></excludePackageNames>
<verbose>true</verbose>
<fork>true</fork>
<showDeprecation>true</showDeprecation>
<showWarnings>true</showWarnings>
<source>${java.source.version}</source>
<target>${java.target.version}</target>
<compilerVersion>${java.source.version}</compilerVersion>
<compilerArgument>-Xlint:all</compilerArgument>
<minmemory>128m</minmemory>
<maxmem>512m</maxmem>

<encoding>${project.build.sourceEncoding}</encoding>

<additionalparam>
-charset UTF-8
-docencoding UTF-8
-version
-author
-breakiterator
-linksource
-sourcetab 4
-windowtitle "${project.name} ${project.version} API Reference"
-doctitle "${project.name} ${project.version} API Reference"
-bottom "Copyright ${project.inceptionYear}-Present ${project.organization.name}. All Rights Reserved."
-link http://java.sun.com/javase/6/docs/api/
-link http://jsr311.java.net/nonav/releases/1.1
</additionalparam>
</configuration>
</plugin>

如果我排除注释包,那么构建运行正常。但是,如果我排除了包中的所有文件而不是包中的所有文件,那么它会崩溃并出现非常相似的错误。我可以在 eclipse 中很好地生成 javadoc。如果我编辑在使用 3.3.2.GA/hibernate-core-3.3.2.GA.jar 而不是 hibernate-core-4.1.8.Final.jar 失败后生成的选项文件然后运行 bat 文件。这会生成一个完整的聚合 javadoc 站点,但是,在运行中有几个与 @Typedef 相关的错误。 Javadoc 1.7_60 和 1.6_45 都以同样的方式失败。

最佳答案

固定:有一个bug在 1.6 和 1.7 的 javadoc 编译器中,没有 jar 的注释抛出 NPE。 1.8 javadoc 编译器可以工作,但是我仍然遇到错误,因为我没有正确的 jar。我不得不查看几个不同的 poms,因为我的一个模块有一个不同的 hibernate 库硬编码到其中。

最终结果:当我将该库更改为标准库时,maven 无法编译,但 javadoc:aggregate 可以正常运行。将两者都切换到我的模块中的版本也没有用。我最终不得不使用 this 从我的 javadoc 构建中删除模块变通。这无关紧要,因为它是一个实验模块,但如果我需要它,我会简单地添加一个配置文件,允许我在 javadoc 运行时更改版本。

希望没有人像我一样再次陷入困境。 :)

关于java - Maven javadoc :javadoc works but javadoc:aggregate throws errors that look like compiler errors,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24564554/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com