使 "gradle javadoc" 任务与 Java 一起工作 9

Make "gradle javadoc" task work with Java 9

我有一个使用 source/target = 1.9/1.9 的多模块 Gradle Java 项目。有两个模块,my.basemy.dependsOnBasemy.base 模块没有其他依赖项:

module my.base {
    exports my.base.foo;
    exports my.base.bar;
}

my.dependsOnBase模块只有一个依赖,即my.base:

module my.dependsOnBase {
    requires my.base;
    exports my.dependsOnBase.baz;
}

当我 运行 $ gradle javadoc 它在 my.base 上工作正常。但是当它到达 my.dependsOnBase 时,我得到以下错误输出:

/path/to/my $ gradle javadoc

> Task :dependsOnBase:javadoc FAILED
/path/to/my/dependsOnBase/src/main/java/module-info.java:26: error: module not found: my.base
    requires my.base;
                     ^
1 error


FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':dependsOnBase:javadoc'.
> Javadoc generation failed. Generated Javadoc options file (useful for troubleshooting): '/path/to/my/dependsOnBase/build/tmp/javadoc/javadoc.options'

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

* Get more help at https://help.gradle.org

BUILD FAILED in 2s
7 actionable tasks: 3 executed, 4 up-to-date

在项目的早期,我能够得到 Java 编译,它遇到了类似的问题,使用:

compileJava {
    inputs.property("moduleName", moduleName)
    doFirst {
        options.compilerArgs = [
                '--module-path', classpath.asPath,
        ]
        classpath = files()
    }
}

但这些属性并不直接适用于 Gradle javadoc 任务。

如何让我的 Javadoc 正常工作?

这对我有用

javadoc {
  inputs.property("moduleName", moduleName)
  doFirst {
    options.addStringOption('-module-path', classpath.asPath)
  }
}

我在 Gradle 7.1 上试过这个,但无法正常工作,但经过一些修改后发现添加此代码段可以正常工作:

tasks.withType(Javadoc) {
    doFirst {
        options.modulePath = [] + classpath.files
        options.classpath = []
    }
}

[] + ... 似乎是从 Gradle 返回的 org.gradle.api.internal.file.UnionFileCollection 中创建列表的必要解决方法。或者,您可以使用 new ArrayList(classpath.files) 来实现相同的目的。