首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Gradle、Javadoc和JDK版本

Gradle、Javadoc和JDK版本
EN

Stack Overflow用户
提问于 2018-07-02 12:13:51
回答 3查看 712关注 0票数 2

我安装了多个JDK。

在我的build.gradle中,我设置了sourceCompatibility = 1.8以确保正确的使用。这个很好用。

但是,这似乎被Javadoc任务(./gradlew javadoc)忽略了,它由于一个错误(error: package sun.net.www.protocol.http is not visible)而失败--从这个问题中我了解到这是Java9中一个新特性的一个问题。

到目前为止,该项目只针对Java 8。有一天它将升级到Java 9,但今天不会,所以我只想使用Java 8 javadoc生成器而不是Java 9版本。

我检查了任务文档,但似乎没有任何选项可以指定JDK版本。我能做什么?

我希望这个解决方案是一个分级配置,因此它可以很容易地与不同机器上的其他开发人员共享。

查看行为的分级版本(通过IntelliJ安装):

代码语言:javascript
复制
------------------------------------------------------------
Gradle 4.4
------------------------------------------------------------

Build time:   2017-12-06 09:05:06 UTC
Revision:     cf7821a6f79f8e2a598df21780e3ff7ce8db2b82

Groovy:       2.4.12
Ant:          Apache Ant(TM) version 1.9.9 compiled on February 2 2017
JVM:          10.0.1 (Oracle Corporation 10.0.1+10-Debian-4)
OS:           Linux 4.16.0-2-amd64 amd64

Gradle版本,其中有一个警告而不是Javadoc任务的失败(通过Debian的repos安装):

代码语言:javascript
复制
------------------------------------------------------------
Gradle 3.4.1
------------------------------------------------------------

Build time:   2012-12-21 00:00:00 UTC
Revision:     none

Groovy:       2.4.15
Ant:          Apache Ant(TM) version 1.10.3 compiled on June 13 2018
JVM:          10.0.1 (Oracle Corporation 10.0.1+10-Debian-4)
OS:           Linux 4.16.0-2-amd64 amd64

编辑--我找到了此页,它指定了一个可能是解决这个问题的"-source solution“参数,但是我找不到该参数的调用方式:

代码语言:javascript
复制
javadoc {
    options.addStringOption('-source', '8')
}

它编译&运行时没有警告(在build.gradle中),但不会改变任何东西,也不会出现在/build/tmp/javadoc/javadoc.options中。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-02-18 17:56:10

从第6.7级开始,您可以使用JVM项目的分级工具链更改用于不同任务的Java版本。

因此,您可以在build.gradle文件中定义工具链,将其指向您想要使用的Java版本。这可以是本地JDK,或者如果Gradle没有检测到指定的本地JDK,它将下载一个。您可以通过运行以下命令查看工具链级在您的系统中检测到的内容:

代码语言:javascript
复制
gradle -q javaToolchains

在这种情况下,您将指向Java 8:

代码语言:javascript
复制
java {
    toolchain {
        languageVersion = JavaLanguageVersion.of(8)
    }
}

然后把任务指向它。对于Javadoc任务,它将是:

代码语言:javascript
复制
tasks.withType(Javadoc) {
    javadocTool.set(javaToolchains.javadocToolFor(java.toolchain))
}

JavaExec和JavaCompile任务也是如此。策划人的只是有点不同:

代码语言:javascript
复制
tasks.withType(JavaExec) {
    javaLauncher.set(javaToolchains.launcherFor(java.toolchain))
}

tasks.withType(JavaCompile) {
    javaCompiler.set(javaToolchains.compilerFor(java.toolchain))
}

这将允许您在主项目内或甚至在子项目中使用不同的JDK来执行不同的任务(我就是这样使用它的)

请注意,访问build.gradle文件中的java对象可能需要“java库”和/或“应用程序”插件。我不完全确定,因为他们已经出现在我正在使用的项目,有人可以评论和澄清。

代码语言:javascript
复制
plugins {
    id 'application'
    id 'java-library'
}
票数 1
EN

Stack Overflow用户

发布于 2018-07-05 19:17:45

我通过以下操作更改了path中可用的版本:

代码语言:javascript
复制
export JAVA_HOME=/usr/lib/jvm/default-java
票数 0
EN

Stack Overflow用户

发布于 2020-01-19 23:52:57

代码语言:javascript
复制
javadoc {
  options.source = "8"
}

可能需要将其添加为现有的javadocjavadoc.optionsoptions块。

应该是字符串而不是int。不知道为什么java插件不自动设置这个。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51135994

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档