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

时间:2017-12-19 16:51:47

标签: java gradle javadoc java-9 jigsaw

我有一个使用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工作?

2 个答案:

答案 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) 来实现相同的效果。