是否有针对 maven-javadoc-plugin 错误 MJAVADOC-414 的解决方法?

Is there a workaround for maven-javadoc-plugin bug MJAVADOC-414?

在使用 maven-javadoc-plugin 生成测试 Javadoc 时,我突然收到多个错误,指出 Javadoc 插件无法从我的主代码库中找到任何 classes。虽然 运行 test-javadoc 目标 class 路径仅包含 classes 在 src/test 文件夹中;来自 src/main 的 classes 对插件不可见。

此错误发生在 maven-javadoc-plugin 版本 2.102.10.12.10.2 上。这个错误是官方承认的bugMJAVADOC-414,可以查看bug报告here。官方错误报告列出了一个解决方法,涉及将插件降级到版本 2.9.1,我已经确认这是一个成功的错误解决方法。还值得注意的是,该错误目前已被列为已修复,应该会在下一个版本的 maven-javadoc-plugin 中消除,该版本可能是 2.11 2.10.3.

但是,我正在尝试找到 MJAVADOC-414 的解决方法,该方法不涉及降级 3 个发行版本的过大杀伤力。有谁知道可以以不涉及降级的替代方式成功消除有关缺少 class 引用的错误消息的解决方法?

我目前成功使用 maven-javadoc-plugin 2.10.2 的潜在非降级解决方法涉及向插件的所有测试相关执行添加一个小配置,包括以下目标:test-javadoctest-javadoc-noforktest-aggregatetest-jartest-aggregate-jartest-fixtest-resource-bundle.

一旦确定了针对所列目标的执行,只需将以下配置添加到该执行即可:

<!-- Additional Dependencies workaround for MJAVADOC-414 -->
<additionalDependencies>
    <additionalDependency>
        <groupId>${project.groupId}</groupId>
        <artifactId>${project.artifactId}</artifactId>
        <version>${project.version}</version>
    </additionalDependency>
</additionalDependencies>

此解决方法使用 additionalDependencies 标记在插件执行期间向类路径添加依赖项。添加的依赖项是使用 groupId、artifactId 和版本的项目变量定义的。实际上,我们将当前 POM 定义的项目添加到 maven-javadoc-plugin 测试执行的类路径中。

通过相对变量定义依赖关系使该解决方案对于单个 POM 和多个 POM 项目都是安全的。此解决方案也可以成功地与 pluginManagement 声明一起使用。如果您不小心将此解决方案添加到非测试阶段相关的执行中,它应该是无害的,但它可能会重复并可能增加执行时间。