我有一个使用source / target = 1.9 / 1.9的多模块Gradle Java项目。有两个模块, my.base 和 my.dependsOnBase 。 my.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工作?
答案 0 :(得分:5)
这对我有用
javadoc {
inputs.property("moduleName", moduleName)
doFirst {
options.addStringOption('-module-path', classpath.asPath)
}
}
答案 1 :(得分:0)
我在 Gradle 7.1 上尝试了这个,但无法让它工作,但经过一些修补后发现添加此代码段可以正常工作:
tasks.withType(Javadoc) {
doFirst {
options.modulePath = [] + classpath.files
options.classpath = []
}
}
[] + ...
似乎是从 Gradle 返回的 org.gradle.api.internal.file.UnionFileCollection
生成列表的必要解决方法。或者,您可以使用 new ArrayList(classpath.files)
来实现相同的效果。