从源代码构建 Elasticsearch,但它需要 Java 10

Building Elasticsearch from source, but it wants Java 10

我正在尝试从源代码构建 Elasticsearch。我从 GitHub repo today, and I'm following the instructions under "Building from Source".

克隆

运行 ./gradlew assemble 产生以下错误:

...
> Configure project :benchmarks
=======================================
Elasticsearch Build Hamster says Hello!
=======================================
  Gradle Version        : 4.7
  OS Info               : Linux 4.4.0-112-generic (amd64)
  JDK Version           : Oracle Corporation 1.8.0_161 [Java HotSpot(TM) 64-Bit Server VM 25.161-b12]
  JAVA_HOME             : /usr/lib/jvm/java-8-oracle
  Random Testing Seed   : 5554B47DBBCF3CFB
Project evaluation failed including an error in afterEvaluate {}. Run with --stacktrace for details of the afterEvaluate {} error.

FAILURE: Build failed with an exception.

* Where:
Build file '<redacted>/elasticsearch-master/benchmarks/build.gradle' line: 31

* What went wrong:
A problem occurred evaluating project ':benchmarks'.
> Failed to apply plugin [id 'elasticsearch.build']
   > the environment variable JAVA_HOME must be set to a JDK installation directory for Java 1.10 but is [/usr/lib/jvm/java-8-oracle] corresponding to [1.8]
...

运行 sudo ./gradlew assemble 产生不同的错误:

FAILURE: Build failed with an exception.

* Where:
Build file '<redacted>/elasticsearch-master/benchmarks/build.gradle' line: 31

* What went wrong:
A problem occurred evaluating project ':benchmarks'.
> Failed to apply plugin [id 'elasticsearch.build']
   > JAVA_HOME must be set to build Elasticsearch

但据我所知,我的 JAVA_HOME 已设置:

$ echo $JAVA_HOME
/usr/lib/jvm/java-8-oracle

$ sudo echo $JAVA_HOME
/usr/lib/jvm/java-8-oracle

$ ls /usr/lib/jvm/java-8-oracle
bin  COPYRIGHT  db  include  javafx-src.zip  jre  lib  LICENSE  man  README.html  release  src.zip  THIRDPARTYLICENSEREADME-JAVAFX.txt  THIRDPARTYLICENSEREADME.txt

其他可能有用的信息:

$ java -version
java version "1.8.0_161"
Java(TM) SE Runtime Environment (build 1.8.0_161-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.161-b12, mixed mode)

$ gradle -v

------------------------------------------------------------
Gradle 4.7
------------------------------------------------------------

Build time:   2018-04-18 09:09:12 UTC
Revision:     b9a962bf70638332300e7f810689cb2febbd4a6c

Groovy:       2.4.12
Ant:          Apache Ant(TM) version 1.9.9 compiled on February 2 2017
JVM:          1.8.0_161 (Oracle Corporation 25.161-b12)
OS:           Linux 4.4.0-112-generic amd64

我是 运行 Ubuntu 16.04.

有谁知道如何在不升级到 Java 10 的情况下修复此错误(或者,我如何从源代码构建最新版本的 Elasticsearch)?

Elasticsearchsays that it only requires Java 8时,其实是说Java8个就足够运行Elasticsearch了。 构建 Elasticsearch 完全不同,似乎需要 Java 10 个(我假设正在使用 Java 10 个功能)。所以如果你想从源代码构建 Elasticsearch,你必须升级到 Java 10.

从源代码构建需要多个 java 版本用于编译、运行时,并且需要 testing.JDK 13 来构建 Elasticsearch。你必须有一个 JDK 13 安装,环境变量 JAVA_HOME 引用你的 JDK 13 安装的 Java 主目录的路径。默认情况下,测试使用与 JAVA_HOME 相同的运行时。但是,由于 Elasticsearch 支持 JDK 11,因此构建支持使用 JDK 13 进行编译并在 JDK 11 运行时进行测试;为此,将 RUNTIME_JAVA_HOME 设置为指向 JDK 11 安装的 Java 主目录。请注意,此机制也可用于针对其他 JDK 进行测试,这不仅限于 JDK 11.

注意:还需要JAVA8_HOME、JAVA9_HOME、JAVA10_HOME和JAVA11_HOME以及JAVA12_HOME才能通过测试.

来源:https://discuss.elastic.co/t/unable-to-build-elasticsearch-from-source-on-mac-could-not-set-unknown-property-excludes/191394 and https://github.com/elastic/elasticsearch/blob/master/CONTRIBUTING.md#contributing-to-the-elasticsearch-codebase通读这些内容对我理解这个构建错误以及为什么它需要不同版本的不同环境变量非常有帮助。 希望它能帮助遇到同样问题的任何人。