Search code examples
javaelasticsearchjava-8java-10

Building Elasticsearch from source, but it wants Java 10


I'm trying to build Elasticsearch from the source. I cloned from the GitHub repo today, and I'm following the instructions under "Building from Source".

Running ./gradlew assemble produces the following error:

...
> 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]
...

Running sudo ./gradlew assemble produces a different 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']
   > JAVA_HOME must be set to build Elasticsearch

But as far as I can tell, my JAVA_HOME is set:

$ 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

Other possibly-useful information:

$ 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

I'm running Ubuntu 16.04.

Anyone know how to fix this error (or alternatively, how I can build the latest version of Elasticsearch from the source), without upgrading to Java 10?


Solution

  • When Elasticsearch says that it only requires Java 8, it actually means that Java 8 is sufficient to run Elasticsearch. Building Elasticsearch is completely different and seems to require Java 10 (I would assume Java 10 features are being used). So if you want to build Elasticsearch from the source, you have to upgrade to Java 10.