ग्रैडल गलत JAVA_HOME ढूंढता है भले ही वह सही ढंग से सेट हो


168

जब मैं रनिंग को चलाने का प्रयास कर रहा हूं, मुझे निम्नलिखित त्रुटि मिलती है:

# 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यह भी पुष्टि करता है कि JAVA_HOME सही तरीके से सेट है और पथ पर है।

# 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

साथ ही मैं में कोई डुप्लिकेट JAVA_HOME परिभाषाओं देखते हैं कि जांच कर ली है .bash_profileया /etc/profile

तो मेरा सवाल यह है कि ग्रेडल कैसे / क्यों पाता है /usr/lib/jvm/default-java, और इससे भी महत्वपूर्ण बात यह है कि मैं इसे सही निर्देशिका के लिए कैसे इंगित करता हूं?

अन्य कार्यक्रमों में जेडीके को ठीक काम करने की आवश्यकता होती है, इसलिए मुझे लगता है कि यह एक ग्रेडल मुद्दा है। मैंने ग्रैडल को फिर से स्थापित करने की कोशिश की है जिससे कोई फर्क नहीं पड़ा।

मैं 64 बिट Xubuntu (Ubuntu 13.10 बेस) चला रहा हूं


कृपया पूर्ण त्रुटि आउटपुट प्रदान करें। जैसा कि यह खड़ा है, यह स्पष्ट नहीं है कि संदेश कहाँ से आता है। इसके अलावा, क्या आपके पास एक /usr/lib/jvm/default-javaनिर्देशिका या सिमलिंक है? और आपने ग्रेडल कैसे स्थापित किया?
पीटर निडरविसर

मैंने क्यू अपडेट किया है, लेकिन यह बहुत अधिक पूर्ण त्रुटि आउटपुट है। कोई /usr/lib/jvm/default-javaदिर नहीं है । एप्ट (एप्ट-गेट इनस्टॉल ग्रेडेल) के साथ स्थापित
जेम्स बार्नेट

ग्रैडल शुरू स्क्रिप्ट JAVA_HOMEको सेट करने की आवश्यकता नहीं है । यदि JAVA_HOMEसेट किया गया है, तो स्क्रिप्ट $JAVA_HOME/bin/javaग्रैड को चलाने के लिए उपयोग करती है। अन्यथा, यह java(यानी javaपर होना है PATH) का उपयोग करता है । शायद (तृतीय-पक्ष) उपयुक्त पैकेज संशोधित प्रारंभ स्क्रिप्ट का उपयोग करता है।
पीटर निडरविसर

Yea को लगता है कि मुझे जो भी ppa मिला, उससे बाइनरी को हार्ड कोडित किया गया था और JAVA_HOME को निर्यात किया था usr/lib/jvm/defult-java। मदद के लिए धन्यवाद
जेम्स बार्नेट

क्या आपने source ~/.bashrcJAVA_HOME सेट करने के बाद अपनी मशीन को रीबूट या रीबूट किया?
इगोरगानपोलस्की

जवाबों:


263

यह बताता है कि विशेष ग्रैडल बाइनरी जिसे मैंने Ubuntu 13.10 रिपॉजिटरी से डाउनलोड किया था, वह स्वयं JAVA_HOME को निर्यात करने की कोशिश करता है। यह सुझाव देने के लिए लुकास का धन्यवाद ।

/usr/bin/gradle लाइन 70:

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

इस लाइन को टिप्पणी करने से समस्या हल हो जाती है और ग्रैडल जावा बाइनरी का सही रास्ता खोज लेता है।

यदि आप बस उनकी वेबसाइट से बाइनरी डाउनलोड करते हैं , तो यह समस्या नहीं है, यह उबंटू रेपो संस्करण के साथ एक समस्या है। 13.10 संस्करण के साथ कुछ अन्य मुद्दे भी प्रतीत होते हैं।


इस पैकेज में जंक को स्थापित करने के लिए ग्रेडेल पैकेज दिखाई देता है, कम से कम Ubuntu 12.04 LTS पर केवल डिफ़ॉल्ट रिपॉजिटरी के साथ। मैंने इसे एक उबंटू वीएम पर किया था जिसमें जावा नहीं था, पहले इसे स्नैपशॉट दिया था, apt-get install gradle (जो लगभग 400 पैकेज स्थापित करता है), और इसने java को / usr / lib / jvm में स्थापित किया ... स्नैपशॉट, नहीं / usr / lib / JVM। मैं JAVA_HOME को निर्यात करने वाली ग्रेड स्क्रिप्ट के सिद्धांत का परीक्षण कर रहा था और वास्तव में यह करता है, जैसा कि आपने पाया।
जोशुआ मैकिनॉन

2
ग्रेडल ऐसा नहीं करता है। Ppa किसी और द्वारा प्रदान की जाती है, और इसलिए आपको उनसे पूछना होगा। सामान्य तौर पर, मैं पैकेज मैनेजर के माध्यम से इसे स्थापित करने के बजाय ग्रैडल रैपर के माध्यम से ग्रैडस्ट्रैप को बूट करने की सलाह दूंगा।
पीटर निडरविसर

मैंने उत्तर को स्पष्ट करने के लिए अद्यतन किया कि उबंटू रेपो संस्करण समस्या है, न कि ग्रैडल ही।
जेम्स बार्नेट

11
धन्यवाद, मैं इस समस्या के समाधान के लिए एक घंटे से अधिक समय तक खोज करता हूं। इस पोस्ट के लिए धन्यवाद, यह ubuntu 14.04
Kay Schneider

1
अपनी समस्या को हल करने का तरीका (और एक साथ मेरा)! यह शर्म की बात है कि यह सवाल एक साल पुराना है और रिपॉजिटरी में ग्रैडल स्क्रिप्ट को इसे ठीक करने के लिए अपडेट नहीं किया गया है।
सोत्र

49

एक प्रतीकात्मक लिंक जोड़ें

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

@ नर आपको कृपया JAVA की स्थापना पथ प्रदान कर सकता है
शशि

उत्तर के लिए धन्यवाद, लेकिन जावा के पथ बात है क्योंकि के रूप में Gradle स्क्रिप्ट ओवरराइड पथ कहा जेम्स नहीं है stackoverflow.com/a/22309017/1679348
नर

5
मेरे लिए बस ठीक काम किया। नाम ( डिफ़ॉल्ट-जावा ) को देखते हुए , मैं कहूंगा कि यह एक काफी समझदार दृष्टिकोण है।
फिल

2
मेरी राय में यह ग्रेडल फ़ाइलों को बदलने की तुलना में बहुत बेहतर समाधान है। (और हाँ, यह मेरे लिए ठीक काम करता है)
zorglub76

शुक्रिया जनाब! आपने मेरा समय बचाया!
एलेक्सके

21

समाधान है JAVA_HOME == बिन के ऊपर dir करना जहाँ javac रहता है

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

ठीक है तो अंत में वास्तविक 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

मेरे लिए यह त्रुटि 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

यदि हम ubuntu repo से स्थापित करते हैं, तो यह पुराने संस्करण को स्थापित करेगा, (मेरे लिए यह 1.4 था)। पुराने संस्करण में, यह के रूप में ढाल से जावा घर सेट करता है export JAVA_HOME=/usr/lib/jvm/default-java। नवीनतम संस्करण में यह समस्या नहीं है।


5

क्या आप exportअपने JAVA_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(थोड़ा अलग वाक्यविन्यास लेकिन मैं इसका एक ही मान लेता हूं)
जेम्स बार्नेट

3
@JamesBarnett, क्या gradleकमांड उस चर को सेट कर सकता है? शायद स्थापित करने वाले व्यक्ति ने gradleएक आवरण स्क्रिप्ट बनाई, जो अनुप्रयोग शुरू करने से पहले पर्यावरण चर निर्धारित करती है। टोमकाट का उपयोग करते समय, यह catalina.sh(जो कि स्टार्टअप स्क्रिप्ट है) के लिए असामान्य नहीं है ताकि setenv.shपर्यावरण चर स्थापित करने के लिए कॉल किया जा सके जिसमें शामिल हो सकता हैJAVA_HOME
लुकास

4

जब मैंने उबंटू पर निम्न कमांड चलाया तो मुझे इस समस्या का सामना करना पड़ा:

ionic build android

इस समस्या को हल करने के लिए, मैंने निम्नलिखित कदम उठाए:

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

JAVA_HOME को / etc / पर्यावरण में जोड़ें:

vi /etc/environment

जोड़ें:

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

सहेजने के बाद, इसे पढ़ें:

source /etc/environment

अंत में, आप बिल्ड कमांड चला सकते हैं।


4

मैं एक ही समस्या थी, लेकिन मैं नवीनतम संस्करण 2.13 के लिए ग्रेड फ़ाइल में लाइन 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

कारण यह है, यदि आप अपनी ग्रेडेल फ़ाइल की जांच करते हैं, तो आप लाइन 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


यहाँ कुंजी / बिन / जावा को छोड़ना है
बोरजेंट


2

आप अपने फ़ोल्डर में स्थापना फ़ोल्डर के बिन फ़ोल्डर में भी जा सकते हैं और gradle.bat फ़ाइल में JAVA_HOME पैरामीटर को सही कर सकते हैं। मेरे मामले में, मेरे JAVA_HOME को c: \ Program files \ java \ bin में सेट किया गया था। gradav.bat में JAVA_HOME को JAVA_HOME% \ bin \ java.exe% में सेट किया गया था।

मैंने JAVA_HOME को gradle.bat में सही किया और यह काम कर गया।

धन्यवाद!!!


अब 2019 है और यह अभी भी एक मुद्दा है! इसके थोड़े अलग और गलत को छोड़कर अब "JAVA_EXE =% JAVA_HOME% / bin / java.exe" सेट करें - बिन भाग को ठीक करने के लिए यहाँ से हटा दें।
एंडी लोरेंज

2
sudo ln -s /usr/lib/jvm/java-7-oracle/jre /usr/lib/jvm/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.

यह उत्तर बेहतर होगा यदि आपने समझाया कि यह कमांड क्या करता है और इसकी आवश्यकता क्यों है।
इयान मैक्लेयर

2

कमांड चलाने से पहले दर्ज करने का प्रयास करें:

export JAVA_HOME="path_to_java_home"

path_to_java_homeवह फ़ोल्डर कहां है जहां आपका bin/javaहै।

यदि जावा ठीक से स्थापित है, तो आप कमांड का उपयोग करके यह स्थान पा सकते हैं:

readlink -f $(which java)

bin/javaइसे डालते समय पथ के अंत से हटाना न भूलेंJAVA_HOME


1

मुझे इससे भी समस्या थी। सही होने पर यह गलत निर्देशिका थी। इसलिए मैंने अभी अंतिम / बिन / जावा को छोड़ने के लिए 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.exe

के तहत %JAVA_HOME%/binअगर सब कुछ सही है।

यह मेरे लिए काम करता है (मेरा खाता क्लाइंट द्वारा अक्षम हो गया और उनके व्यवस्थापक ने java.exe को मेरी निर्देशिका से हटा दिया है।)


0

मेरे dockercontainer में (जावा नहीं मिलने की समस्या कम से कम), वह "जो" स्थापित नहीं था। एक परियोजना का उपयोग करते हुए gradlew का उपयोग किया जाता है जो कि ./gradlew में java Installing को खोजने के लिए स्थापित करता है जिससे समस्या हल हो जाती है।


0

[विंडोज] जैसा कि पहले ही कहा गया है, यह ऐसा दिखता है। बीट -फाइल java.exe को खोजने की कोशिश करता है, %JAVA_HOME%/bin/java.exeइसलिए यह इसे नहीं पाता है क्योंकि binदो बार पथ में दोहराया जाता है। उस अतिरिक्त /binको gradle.bat से निकालें।

Gradle


0

Build.gradle में नीचे की पंक्तियों को जोड़ने से मेरी समस्या हल हो गई।

sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.