Gradle은 올바르게 설정되었지만 잘못된 JAVA_HOME을 찾습니다.


168

gradle을 실행하려고하면 다음 오류가 발생합니다.

# gradle

ERROR: JAVA_HOME is set to an invalid directory: /usr/lib/jvm/default-java

Please set the JAVA_HOME variable in your environment to match the
location of your Java installation.

그러나 JAVA_HOME 변수를 확인하면 다음과 같은 결과가 나타납니다.

# echo $JAVA_HOME 
/usr/lib/jvm/java-7-oracle

내 JAVA_HOME은 .bashrc에 정의되어 있으며 소스로 설정되어 있는지 다시 확인했습니다.

java -version또한 Running 은 JAVA_HOME이 올바르게 설정되었으며 PATH에 있는지 확인합니다.

# java -version
java version "1.7.0_51"
Java(TM) SE Runtime Environment (build 1.7.0_51-b13)
Java HotSpot(TM) 64-Bit Server VM (build 24.51-b03, mixed mode)

또한 /usr/bin/java심볼릭 링크가 /etc/alternatives/java올바르게 심볼릭 링크되는지 확인했습니다./usr/lib/jvm/java-7-oracle/jre/bin/java

또한 .bash_profile또는에 중복 된 JAVA_HOME 정의가 없는지 확인했습니다 /etc/profile.

그래서 내 질문은 Gradle이 어떻게 / 왜 찾 /usr/lib/jvm/default-java습니까? 더 중요한 것은 올바른 디렉토리를 어떻게 가리 킵 니까?

JDK가 필요한 다른 프로그램은 제대로 작동하므로 Gradle 문제가 있다고 생각합니다. 또한 차이를 만들지 않은 Gradle을 다시 설치하려고했습니다.

64 비트 Xubuntu (Ubuntu 13.10 기본)를 실행 중입니다.


전체 오류 출력을 제공하십시오. 메시지가 어디에서 왔는지 명확하지 않습니다. 또한 /usr/lib/jvm/default-java디렉토리 또는 심볼릭 링크가 있습니까? 그리고 Gradle을 어떻게 설치 했습니까?
Peter Niederwieser 2014 년

Q를 업데이트했지만 전체 오류 출력이 거의 같습니다. 더디가 없습니다 /usr/lib/jvm/default-java. apt (apt-get install gradle)로 설치
James Barnett

Gradle 시작 스크립트 JAVA_HOME를 설정할 필요가 없습니다 . 경우 JAVA_HOME설정, 스크립트의 사용은 $JAVA_HOME/bin/javaGradle을 실행합니다. 그렇지 않으면를 사용합니다 java(예 : java에 있어야 함 PATH). 아마도 (타사) apt 패키지는 수정 된 시작 스크립트를 사용합니다.
Peter Niederwieser 2014 년

Yea는 바이너리를 얻은 ppa가 하드 코딩되어 JAVA_HOME을 내 보낸 것처럼 보입니다 usr/lib/jvm/defult-java. 도움을 주셔서 감사합니다
James Barnett

source ~/.bashrcJAVA_HOME을 설정 한 후 시스템을 재부팅 했습니까 ?
IgorGanapolsky

답변:


263

나는 우분투 13.10 저장소에서 다운로드 한 특정 Gradle을 진 것으로 나타났다 자체는 시도는 JAVA_HOME을 보냅니다. 이것을 제안 해 준 Lucas 에게 감사합니다 .

/usr/bin/gradle 70 행 :

export JAVA_HOME=/usr/lib/jvm/default-java

이 줄을 주석 처리하면 문제가 해결되고 Gradle은 Java 바이너리의 올바른 경로를 찾습니다.

웹 사이트 에서 바이너리를 다운로드하면 이 문제가 발생하지 않으며 Ubuntu repo 버전의 문제입니다. 13.10 버전에는 다른 문제가있는 것 같습니다.


gradle 패키지는 적어도 기본 저장소 만있는 Ubuntu 12.04 LTS에서 jdk를이 위치에 설치하는 것으로 보입니다. Java가없는 Ubuntu VM 에서이 작업을 수행했으며 먼저 스냅 샷을 작성하고 apt-get install gradle (400 패키지를 설치 함)하고 java를 / usr / lib / jvm에 설치했습니다. / lib / jvm. JAVA_HOME을 내보내는 gradle 스크립트 이론을 테스트하고 실제로 발견했습니다.
Joshua McKinnon

2
Gradle은 이것을하지 않습니다. ppa는 다른 사람이 제공하므로 요청해야합니다. 일반적으로 패키지 관리자를 통해 설치하는 대신 Gradle Wrapper를 통해 Gradle을 부트 스트랩하는 것이 좋습니다.
Peter Niederwieser

나는 Gradle 자체가 아니라 Ubuntu repo 버전이 문제라는 것을 분명히하기 위해 답변을 업데이트했습니다.
James Barnett

11
감사합니다.이 문제에 대한 해결책을 찾기 위해 한 시간 이상을 검색합니다. 이 게시물에 감사드립니다, 그것은 우분투 14.04에서 내 문제를 해결합니다
Kay Schneider

1
자신의 문제를 해결하는 방법 (그리고 동시에 광산)! 이 질문이 1 년이었고 저장소의 Gradle 스크립트 가이 문제를 해결하기 위해 업데이트되지 않았다는 것은 부끄러운 일입니다.
sotrh

49

심볼릭 링크 추가

sudo ln -s /usr/lib/jvm/java-7-oracle /usr/lib/jvm/default-java

@Nar JAVA의 설치 경로를 알려주십시오
Shashi

답변 해 주셔서 감사하지만 JAVA의 경로는 중요하지 않습니다. gradle 스크립트가 경로를 무시하기 때문에 James stackoverflow.com/a/22309017/1679348
Nar

5
나를 위해 잘 작동했습니다. 이름 ( default-java )이 주어지면 이것이 상당히 합리적인 접근법이라고 말하고 싶습니다.
Phil

2
내 생각에 이것은 Gradle 파일을 변경하는 것보다 훨씬 더 나은 솔루션입니다. (그리고 네, 그것은 잘 나를 위해 작동)
zorglub76

감사합니다! 당신은 내 시간을 절약했습니다!
AlexKh

21

해결책은 JAVA_HOME == dir을 javac가있는 bin 위에시키는 것입니다.

type javac

javac is /usr/bin/javac   # now check if its just a symlink

ls -la /usr/bin/javac 

/usr/bin/javac -> /etc/alternatives/javac   # its a symlink so check again

ls -la /etc/alternatives/javac  # now check if its just a symlink

/etc/alternatives/javac -> /usr/lib/jvm/java-8-openjdk-amd64/bin/javac

OK 그래서 마침내 실제 javac 위의 저장소를 찾았습니다.

export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export PATH=$JAVA_HOME/bin:$PATH

위의 단순화 및 일반화 할 수 있습니다

which javac >/dev/null 2>&1 || die "ERROR: no 'javac' command could be found in your PATH"
export JAVA_HOME=$(dirname $(dirname $(readlink -f $(which javac)  )))

13

나 에게이 오류는 Gradle이 sudo 로 설치되어 Gradle을 실행하기 위해 기본 사용자로 시도한 이유 때문 이었습니다.

시험:

sudo gradle -version

또는

sudo gradle -v

7

최신 버전을 설치해보십시오 gradle.

sudo add-apt-repository ppa:cwchien/gradle

sudo apt-get update

sudo apt-get install gradle

우리가 우분투 저장소에서 설치하면 이전 버전이 설치됩니다 (나를 위해 gradle 1.4였습니다). 이전 버전에서는 gradle에서 java 홈을로 설정합니다 export JAVA_HOME=/usr/lib/jvm/default-java. 최신 버전에는이 문제가 없습니다.


5

당신 exportJAVA_HOME? 내보내기가 없으면 설정이 해당 셸 내부에서 시작된 명령으로 전파되지 않습니다. 또한를 java -version사용하지 말고 경로에서 JAVA_HOME처음 java찾은 것을 사용합니다 . .bashrc모양이 다음과 같은지 확인하십시오 .

JAVA_HOME=/path/to/java/home
export JAVA_HOME

1
예. .bashrc에서 export JAVA_HOME=/usr/lib/jvm/java-7-oracle(약간 다른 구문이지만 동일하다고 가정합니다)
James Barnett

3
@JamesBarnett, gradle명령 자체가 해당 변수를 설정할 수 있습니까? 설치 한 사람 gradle이 응용 프로그램을 시작하기 전에 환경 변수를 설정하는 랩퍼 스크립트를 작성 했을 것 입니다. 바람둥이를 사용할 때 다음과 같은 환경 변수를 설정하기 catalina.sh위해 시작 스크립트 인 경우가 드물지 않습니다.setenv.shJAVA_HOME
Lucas

4

우분투에서 다음 명령을 실행할 때이 문제에 직면했습니다.

ionic build android

이 문제를 해결하기 위해 다음 단계를 수행했습니다.

ln -sf /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java /usr/lib/jvm/default-java

/ etc / environment에 JAVA_HOME을 추가하십시오.

vi /etc/environment

더하다:

JAVA_HOME="/usr/lib/jvm/default-java"

저장 후 다음을 읽으십시오.

source /etc/environment

마지막으로 build 명령을 실행할 수 있습니다.


4

나는 같은 문제가 있었지만 최신 버전 2.13의 gradle 파일에서 70 행에서 내보내기 명령을 찾지 못했지만 어리석은 실수를 이해합니다.

당신이 당신의 Gradle을 폴더 / bin에 Gradle을 파일로 내보내기 명령과 함께 라인 (70)을 찾을 수없는 경우 / 후 확인하여 ~ / .bashrc에 찾을 경우 export JAVA_HOME==/usr/lib/jvm/java-7-openjdk-amd64/bin/java, 다음 제거 /bin/java등이 줄에서 JAVA_HOME==/usr/lib/jvm/java-7-openjdk-amd64대신 >>> 경로를하고, 이것의 export PATH=$PATH:$HOME/bin:JAVA_HOME/것입니다 export PATH=$PATH:$HOME/bin:JAVA_HOME/bin/java. 그런 다음를 실행하십시오 source ~/.bashrc.

그 이유는 gradle 파일을 확인하면 70 행 (내보내기 명령이없는 경우) 또는 75 행에서 찾을 수 있기 때문입니다.

JAVACMD="$JAVA_HOME/bin/java"
    fi
    if [ ! -x "$JAVACMD" ] ; then
        die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME

/bin/java, 이미 있다는 의미 이므로 JAVA_HOME경로 에서 빼야 합니다.

그것은 내 경우에 일어났다.


4

우분투 에서이 문제로 2 일 동안 두통이 발생했습니다.

단계 1. 터미널에 입력하면 whereis java 다음과 같이 표시됩니다

java: /usr/bin/java /etc/java /usr/share/java /usr/lib/jvm/java-8-openjdk-amd64/bin/java /usr/share/man/man1/java.1.gz

2 단계. 경로를 기록해 두십시오. /usr/lib/jvm/java-8-openjdk-amd64/bin/java

제외하다 bin/java

당신의 JAVA_HOME = /usr/lib/jvm/java-8-openjdk-amd64


여기서 핵심은 / bin / java를 제외하는 것입니다
Borjante


2

gradle 설치 폴더 내의 bin 폴더로 이동하여 gradle.bat 파일에서 JAVA_HOME 매개 변수를 정정 할 수도 있습니다. 필자의 경우 JAVA_HOME이 c : \ Program files \ java \ bin으로 설정되었습니다. gradle.bat의 JAVA_HOME이 % JAVA_HOME % \ bin \ java.exe로 설정되었습니다.

gradle.bat에서 JAVA_HOME을 수정했으며 작동했습니다.

감사합니다!!!


지금 2019 년이며 여전히 문제입니다! 약간 다른 것을 제외하고 오류가 발생한 변수는 이제 "set JAVA_EXE = % JAVA_HOME % / bin / java.exe"입니다. 여기서 빈 부분을 제거하여 수정하십시오.
Andy Lorenz

2
sudo ln -s /usr/lib/jvm/java-7-oracle/jre /usr/lib/jvm/default-java

default-java 디렉토리에 대한 기호 링크를 작성하십시오.

당신은 당신의 자바 디렉토리를 찾을 수 있습니다

readlink -f $(which java) 
# outputs: /usr/lib/jvm/java-7-oracle/jre/bin/java
# Remove the last `/bin/java` and use it in above symbolic link command.

이 명령의 기능과 필요한 이유를 설명하면이 답변이 향상됩니다.
Ian McLaird

2

명령을 실행하기 전에 다음을 입력하십시오.

export JAVA_HOME="path_to_java_home"

path_to_java_home폴더가 어디에 있습니까 bin/java?

java가 올바르게 설치되어 있으면 다음 명령을 사용하여 해당 위치를 찾을 수 있습니다.

readlink -f $(which java)

bin/java경로를 넣을 때 경로 끝에서 제거 하는 것을 잊지 마십시오.JAVA_HOME


1

나도 이것에 문제가 있었다. 올바른 디렉토리가 잘못되었습니다. 그래서 방금 최종 / bin / java를 생략하고 JAVA_HOME이라는 이름으로 로컬 변수를 만들었습니다. 그것은 나를 위해 잘 작동했습니다.


1

GRADLE_HOME 및 JAVA_HOME 환경이 올바르게 설정된 경우 JDK 디렉토리를 확인 하고 아래 경로 아래에 java.exe 파일 이 있는지 확인하십시오 .

C:\Program Files (x86)\Java\jdk1.8.0_181\bin

gradle.bat 파일에 언급 된 오류

:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe

if exist "%JAVA_EXE%" goto init

echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.

Java 설치를 찾을 수 없습니다. 찾아서 설정

java.exe

아래의 %JAVA_HOME%/bin경우에 모든 것이 올바른 것입니다.

이것은 저에게 효과적입니다 (클라이언트가 내 계정을 비활성화하고 관리자가 내 디렉토리에서 java.exe를 제거했습니다).


0

내 dockercontainer (자바를 찾지 못하는 문제를 최소화 함)에서 "설치되지 않은"것이 었습니다. gradlew를 사용하여 프로젝트를 컴파일하면 ./gradlew에서 Java 설치를 찾기 위해 문제가 해결 된 것을 사용했습니다.


0

[Windows] 이미 언급했듯이 .bat -file은 java.exe를 찾으려고 시도 %JAVA_HOME%/bin/java.exe하므로 bin경로에서 두 번 반복 되므로 찾지 못합니다 . /bingradle.bat에서 그 여분 을 제거하십시오.

그래들


0

build.gradle에 아래 줄을 추가하면 문제가 해결되었습니다.

sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.