简体   繁体   中英

gradlew uses wrong Java version

I am working on an android application using Kotlin. I am running a kotlin linter through command line ./gradlew klint.
But it gives me an error:

Gradle 4.4 requires Java 7 or later to run. You are currently using Java 6.

When I check the project structure, I am using the embedded JDK.
I also updated android studio to latest version. I do not know how to update the embedded JDK to latest version.

java version

"1.6.0_65" Java(TM) SE Runtime Environment (build 1.6.0_65-b14-468) Java HotSpot(TM) 64-Bit Server VM (build 20.65-b04-468, mixed mode)

which java - /usr/bin/java

echo $PATH - /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/username/Library/Android/sdk/platform-tools

echo $JAVA_HOME - empty

A copy of the latest OpenJDK comes bundled with Android Studio 2.2 and higher, and this is the JDK version we recommend you use for your Android projects.

https://developer.android.com/studio/intro/studio-config.html#jdk

This however, is only for building your apps within Android Studio , not from the terminal with gradlew , otherwise, it'll use whatever is on your OS's $PATH variable.

In order to use the embedded JDK, you at least need to set JAVA_HOME , for example,

export JAVA_HOME=/path/to/AndroidStudio/jdk  # TODO: Find this
./gradlew

My recommendation, however, is to use the mechanism for your OS for installing Java.

For easy Java library management (on Linux & Mac), you can try using sdkman

gradle.properties can be updated to point to the embedded JDK that comes with Android Studio in Mac OS:

org.gradle.java.home=/Applications/Android Studio.app/Contents/jre/jdk/Contents/Home

The issue is resolved by adding :

/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin

at the start of the PATH variable . What i have found is that: There are three java locations.

  1. Java that comes with mac ( /usr/bin/java )
  2. Java downloaded from oracle . ( /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin )
  3. Java embedded with Android Studio ( /Applications/Android\\ Studio.app/Contents/jre/jdk/Contents/Home/bin/ )

In my case the gradlew was always using the java from MAC (point number 1). So when i added the " java dowloaded from oracle (point 2)" at the start of path variable it started using the one from oracle and my gradlew command ran.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM