Gradle doğru ayarlanmış olmasına rağmen yanlış JAVA_HOME bulur


168

Gradle'ı çalıştırmaya çalışırken, aşağıdaki hatayı alıyorum:

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

Ancak, ben JAVA_HOME değişken kontrol edin:

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

Benim JAVA_HOME .bashrc içinde tanımlanır ve ben kaynak olarak ayarlandığını iki kez kontrol ettim.

Çalışıyor java -versionayrıca JAVA_HOME'un doğru ayarlandığını ve PATH'de olduğunu doğrular.

# 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)

Ben de kontrol edildikten /usr/bin/javasembolik bağı /etc/alternatives/javada doğru sembolik bağı olan/usr/lib/jvm/java-7-oracle/jre/bin/java

Ayrıca .bash_profileveya yinelenen JAVA_HOME tanımları olup olmadığını kontrol ettim /etc/profile.

Benim sorum Gradle nasıl / neden bulur /usr/lib/jvm/default-javave daha da önemlisi doğru dizine nasıl yönlendirebilirim?

JDK gerektiren diğer programlar iyi çalışıyor, bu yüzden onun bir Gradle sorunu olduğunu düşünüyorum. Ayrıca hiçbir fark yarattı Gradle yeniden denedim.

64bit Xubuntu (Ubuntu 13.10 base) kullanıyorum


Lütfen tam hata çıktısını sağlayın. Durduğu gibi mesajın nereden geldiği belli değil. Ayrıca, bir /usr/lib/jvm/default-javadizininiz veya sembolik bağlantınız var mı? Gradle'ı nasıl kurdunuz?
Peter Niederwieser

Q'yu güncelledim, ancak hemen hemen tüm hata çıktısı. /usr/lib/jvm/default-javaDir yok . Apt (apt-get install gradle) ile yüklendi
James Barnett

Gradle start komut dosyasının JAVA_HOMEayarlanması gerekmez . Eğer JAVA_HOMEayarlanır, script kullandığı $JAVA_HOME/bin/javaGradle çalıştırmak için. Aksi takdirde, kullanır java(yani javaüzerinde olması gerekir PATH). Belki de (üçüncü taraf) apt paketi değiştirilmiş bir başlangıç ​​komut dosyası kullanır.
Peter Niederwieser

Yea, ikili kod aldım ve JAVA_HOME'a ihraç ettiğim her hangi bir ppa'ya benziyor usr/lib/jvm/defult-java. Yardım için teşekkürler
James Barnett

source ~/.bashrcJAVA_HOME'u ayarladıktan sonra yaptınız mı veya makinenizi yeniden başlattınız mı?
IgorGanapolsky

Yanıtlar:


263

Ben Ubuntu 13.10 depodan indirilmesi özellikle Gradle ikili çıkıyor kendisi çalışır JAVA_HOME ihracat. Bunu önerdiği için Lucas'a teşekkürler .

/usr/bin/gradle satır 70:

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

Bu satırın yorumlanması sorunu çözer ve Gradle, Java ikili dosyasına doğru yolu bulur.

İkili web sitelerinden sadece indirirseniz bu sorun yoktur, Ubuntu repo sürümü ile ilgili bir sorundur. 13.10 sürümü ile ilgili başka sorunlar da var gibi görünüyor.


Gradle paketi, jdk'yi en azından yalnızca varsayılan depolara sahip Ubuntu 12.04 LTS'ye bu konuma yüklüyor gibi görünüyor. Bunu Java'ya sahip olmayan bir Ubuntu VM'de yaptım, önce anlık olarak, apt-get install gradle (neredeyse 400 paket yükler) ve / usr / lib / jvm'ye java yükledi ... geri dönen anlık görüntü, no / usr / lib / JVM. JAVA_HOME ihraç gradle script teorisini test ediyordum ve bulduğunuz gibi, gerçekten de öyle.
Joshua McKinnon

2
Gradle bunu yapmaz. Ppa başka biri tarafından sağlanır ve bu yüzden onlara sormanız gerekir. Genel olarak, Gradle'ı bir paket yöneticisi aracılığıyla kurmak yerine Gradle Wrapper aracılığıyla önyüklemenizi öneririm.
Peter Niederwieser

Cevabı, Ubuntu repo sürümünün Gradle'ın kendisi değil sorun olduğunu daha net hale getirmek için güncelledim.
James Barnett

11
Teşekkür ederim, bu soruna bir çözüm bulmak için bir saatten fazla arıyorum. Bu yazı için teşekkürler, ubuntu 14.04
Kay Schneider

1
Kendi probleminizi çözmenin yolu (ve aynı anda benim)! Bu sorunun bir yaşında olması utanç verici ve havuzdaki Gradle betiği bunu düzeltmek için güncellenmedi.
sotrh

49

sembolik bir bağlantı ekle

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

@Nar, JAVA
Shashi

Cevabınız için teşekkür ederiz, ancak JAVA'nın yolu önemli değil çünkü gradle script'in söylediği gibi yolu geçersiz kıldığı James stackoverflow.com/a/22309017/1679348
Nar

5
Benim için iyi çalıştı. Adı göz önüne alındığında ( default-java ), bunun oldukça mantıklı bir yaklaşım olduğunu söyleyebilirim.
Phil

2
Bence bu Gradle dosyalarını değiştirmekten çok daha iyi bir çözüm. (Ve evet, benim için iyi çalışıyor)
zorglub76

Teşekkürler bayım! Zamanımı kurtardın!
AlexKh

21

Çözüm, javac'ın olduğu gibi JAVA_HOME == dir üstündeki bin yapmaktır

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

Tamam, sonunda çöp kutusunu gerçek javacın üstünde buldum, bunu yap

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

yukarıdaki basitleştirilebilir ve genelleştirilebilir

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

Benim için bu hata neden Gradle sudo olarak yüklü neden oldu ve ben Gradle çalıştırmak için varsayılan kullanıcı olarak çalışıyordu.

Deneyin:

sudo gradle -version

veya

sudo gradle -v

7

Sitesinin en son sürümünü yüklemeyi deneyin gradle,

sudo add-apt-repository ppa:cwchien/gradle

sudo apt-get update

sudo apt-get install gradle

Ubuntu repo'dan yüklersek, eski sürümü yükler, (benim için 1.4. sınıftı). Eski sürümde, java home'u gradle'dan olarak ayarlar export JAVA_HOME=/usr/lib/jvm/default-java. En son sürümde bu sorun yok.


5

Bunu mu exportsenin JAVA_HOME? Dışa aktarma olmadan, ayar o kabuğun içinde başlatılan komutlara yayılmaz. Ayrıca, java -versionkullanmak JAVA_HOMEyerine, yolunuzda bulunan ilk kullanır java. .bashrcGörünüşünüzün böyle bir şey olduğundan emin olun :

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

1
Evet, .bashrc'de export JAVA_HOME=/usr/lib/jvm/java-7-oracle(biraz farklı sözdizimi olarak tanımlandı, ancak aynı olduğunu varsayıyorum)
James Barnett

3
@JamesBarnett, gradlekomutun kendisi bu değişkeni ayarlıyor olabilir mi? Belki de yükleyen kişi gradle, uygulamaya başlamadan önce ortam değişkenlerini ayarlayan bir sarmalayıcı betiği oluşturmuştur. Tomcat kullanırken, catalina.sh(başlangıç ​​komut dosyası setenv.sholan) aşağıdakileri içerebilecek ortam değişkenlerini ayarlamak için çağrı yapmak nadir değildirJAVA_HOME
Lucas

4

Ubuntu'da aşağıdaki komutu çalıştırdığımda bu sorunla karşılaştım:

ionic build android

Bu sorunu çözmek için aşağıdaki adımları uyguladım:

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

/ Etc / ortamına JAVA_HOME ekleyin:

vi /etc/environment

Ekle:

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

Kaydettikten sonra okuyun:

source /etc/environment

Son olarak, build komutunu çalıştırabilirsiniz.


4

Aynı sorunu yaşadım, ancak son sürüm 2.13 için gradle dosyasında 70 satırındaki export komutunu bulamadım, ama orada aptalca bir hatayı anlıyorum, takip ediyor,

Gradle klasöründe / bin / dosyasında gradle dosyasında export komutuyla 70 numaralı satırı bulamazsanız export JAVA_HOME==/usr/lib/jvm/java-7-openjdk-amd64/bin/java, bulursanız ~ / .bashrc'nizi kontrol edin , sonra /bin/javabu satırdan kaldırın , JAVA_HOME==/usr/lib/jvm/java-7-openjdk-amd64bunun yerine >>> yolunda bunun export PATH=$PATH:$HOME/bin:JAVA_HOME/, öyle olacak export PATH=$PATH:$HOME/bin:JAVA_HOME/bin/java. Sonra koş source ~/.bashrc.

Bunun nedeni, gradle dosyanızı kontrol ederseniz, 70. satırda (dışa aktarma komutu yoksa) veya 75. satırda,

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

Bunun anlamı /bin/java zaten orada olduğu için, JAVA_HOMEyoldan çıkarılması gerekiyor.

Bu benim durumumda oldu.


4

Ubuntu'mda, bu konuda 2 gün boyunca başım ağrıyor.

Adım 1. Terminali yazın, whereis java sonra böyle bir şey gösterecektir

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. Adım. Yolu not edin: /usr/lib/jvm/java-8-openjdk-amd64/bin/java

hariç tut bin/java

JAVA_HOME = /usr/lib/jvm/java-8-openjdk-amd64


Burada anahtar / bin / java
Borjante

2

Benim için Eclipse'deki harici araçlar yapılandırmasının argümanlar bölümünde açık bir set problemdi.

resim açıklamasını buraya girin


2

Gradle kurulum klasörünüzdeki bin klasörüne gidebilir ve gradle.bat dosyasındaki JAVA_HOME parametresini düzeltebilirsiniz. Benim durumumda, benim JAVA_HOME c: \ Program files \ java \ bin olarak ayarlandı gradle.bat içindeki JAVA_HOME% JAVA_HOME% \ bin \ java.exe olarak ayarlandı.

Gradle.bat içindeki JAVA_HOME'u düzelttim ve işe yaradı.

Teşekkür ederim!!!


Şimdi 2019 ve bu hala bir sorun! Biraz farklı ve hata değişken dışında şimdi "set JAVA_EXE =% JAVA_HOME% / bin / java.exe" - düzeltmek için bin bölümünü çıkarın.
Andy Lorenz

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

Varsayılan java dizinine sembolik bir bağlantı oluşturun.

Java dizininizi şu şekilde bulabilirsiniz:

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.

Bu komutun ne yaptığını ve neden gerekli olduğunu açıklarsanız bu yanıt geliştirilecektir.
Ian McLaird

2

Komutu çalıştırmadan önce girmeyi deneyin:

export JAVA_HOME="path_to_java_home"

Nerede path_to_java_homeklasör varbin/java .

Java düzgün bir şekilde kurulmuşsa, komutunu kullanarak konumunu bulabilirsiniz:

readlink -f $(which java)

bin/javaİçeri girerken yolun sonundan çıkarmayı unutmayınJAVA_HOME


1

Bununla da bir sorunum vardı. Doğru olduğunda yanlış dizin dedi. Bu yüzden sadece final / bin / java'yı atlayan JAVA_HOME adıyla yerel bir değişken yarattım. Benim için iyi çalıştı.


1

GRADLE_HOME ve JAVA_HOME ortamınız düzgün ayarlandıysa, JDK dizininizi kontrol edin ve aşağıdaki yolun altında java.exe dosyanız olduğundan emin olun .

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

Gradle.bat dosyasında belirtilen hata olarak

: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 kurulumunuzu bulamıyor. Öyleyse bul ve ayarla

java.exe

altında %JAVA_HOME%/binise her şey doğrudur.

Bu benim için çalışıyor (hesabım istemci tarafından devre dışı bırakıldı ve yöneticileri java.exe dosyasını dizinimden kaldırdı.)


0

Benim dockercontainer (java bulma sorunu asgari olmak), "hangi" yüklü değildi oldu. Gradlew kullanarak bir projenin hazırlanması ./gradlew içinde java'yı bulmak için kullanılan problemi çözen yükleme.


0

[Windows] Daha önce de belirtildiği gibi, .bat -file java.exe dosyasını bulmaya çalışıyor, %JAVA_HOME%/bin/java.exebu yüzden binyolda iki kez tekrarlandığı için bulamıyor . Bu /binekstraı gradle.bat dosyasından kaldırın.

Gradle


0

Build.gradle içinde aşağıdaki satırları eklemek sorunumu çözdü.

sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.