【问题标题】:Make "gradle javadoc" task work with Java 9使“gradle javadoc”任务与 Java 9 一起工作
【发布时间】:2018-06-02 03:56:27
【问题描述】:

我有一个使用 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 任务详细信息?另外,在执行该任务时,您是否尝试确保 my.base 模块也存在于模块路径中?
  • @nullpointer,我还没有尝试过,因为我不太了解 Gradle,也无法理解如何在 Gradle 中设置 javadoc 任务模块路径(盲复制/粘贴compileJava 块肯定不起作用)。我的build.gradle 中没有明确的javadoc 任务 - 我只是使用java 插件已经提供的任何东西。
  • 这是 Gradle 的 JavaDoc 任务中的一个错误......即使使用新的 'org.gradle.java.experimental-jigsaw' 插件,这个问题在 Gradle 4.5.1 中仍然存在。但是@Thor Andreas Rognan 的回答确实对我有用!

标签: java gradle javadoc java-9 java-platform-module-system


【解决方案1】:

我在 Gradle 7.1 上尝试过,但无法正常工作,但经过一番修改后发现添加此 sn-p 后一切正常:

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

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

【讨论】:

    【解决方案2】:

    这对我有用

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

    【讨论】:

    • 从 Gradle 4.6 开始,我仍然遇到这个问题,但与此同时,Thor Andreas Rognan 的回答为我解决了这个问题。谢谢雷神!
    猜你喜欢
    • 2018-04-03
    • 2016-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-26
    • 2014-10-05
    • 2021-08-15
    相关资源
    最近更新 更多