Java 9 के साथ sdkmanager --list चलाने में विफल


94

मैंने डाउनलोड और इंस्टॉल किया:

PATHचर को कॉन्फ़िगर करने के बाद , मैंने चलाने की कोशिश की sdkmanager, जिसने androidएसडीके घटकों के प्रबंधन के लिए कमांड को बदल दिया । हालाँकि, यह यहाँ दिखाए अनुसार विफल रहा:

$ sdkmanager --list
Exception in thread "main" java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema
    at com.android.repository.api.SchemaModule$SchemaModuleVersion.<init>(SchemaModule.java:156)
    at com.android.repository.api.SchemaModule.<init>(SchemaModule.java:75)
    at com.android.sdklib.repository.AndroidSdkHandler.<clinit>(AndroidSdkHandler.java:81)
    at com.android.sdklib.tool.SdkManagerCli.main(SdkManagerCli.java:117)
    at com.android.sdklib.tool.SdkManagerCli.main(SdkManagerCli.java:93)
Caused by: java.lang.ClassNotFoundException: javax.xml.bind.annotation.XmlSchema
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:582)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:185)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:496)
    ... 5 more

यहाँ जावा संस्करण है:

$ java -version
java version "9.0.1"
Java(TM) SE Runtime Environment (build 9.0.1+11)
Java HotSpot(TM) 64-Bit Server VM (build 9.0.1+11, mixed mode)

क्या किसी को पता है कि जावा 8 पर वापस जाए बिना इसे कैसे ठीक किया जाए?

संबंधित सवाल

  • Android-sdk स्थापित करने में विफल
    • इस पोस्ट ने एक समान प्रश्न पूछा। हालाँकि, पोस्ट बंद है और एकमात्र उत्तर जावा 8 पर वापस जाने का सुझाव देता है।

1
बस सोच रहा था: यह करने का उद्देश्य क्या है?
भूतकाल Ghost

2
जावा 9 में नई सुविधाओं की कोशिश कर रहा है, लेकिन एक ही समय में एंड्रॉइड ऐप विकसित कर रहा है, और सिस्टम में सिर्फ एक जेडीके चाहता है।
सियु चिंग पोंग -असुका केंजी-

जुड़ा हुआ उत्तर Android SDK विशिष्ट नहीं है। यह इंगित नहीं किया गया कि किस स्क्रिप्ट को संपादित करना है, और कहां संपादित करना है। कृपया ध्यान दें कि हर कोई शेल स्क्रिप्ट नहीं जानता है, और जो लोग जानते हैं, उनके लिए भी समस्या को जल्दी से हल करने में मदद करता है। क्या आप एक सरल विन्यास समस्या को हल करने के लिए आपके द्वारा लिखी गई स्क्रिप्ट को नहीं पढ़ना चाहते हैं, जबकि एक कार्यशील समाधान वहां है जो पहले से ही किसी के द्वारा परीक्षण किया गया है?
सियु चिंग पोंग -आसुका केंजी-

2
उस टिप्पणी पर, मैंने stackoverflow.com/questions/46402772/… को फिर से खोलने के लिए वोट दिया है, यहां तक ​​कि टिप्पणियों के अनुसार भी।
नमन

कृपया इसे तब तक न हटाएं, जब तक कि stackoverflow.com/q/46402772/142239 को फिर से नहीं खोला जाता है, और मैं अपना उत्तर कॉपी करता हूं। मेरे पास मेरे StackOverflow पोस्ट का बैकअप नहीं है। धन्यवाद!
सियु चिंग पोंग -आसुका केंजी-

जवाबों:


159

इस उत्तर की मदद से , मैंने समस्या को सफलतापूर्वक हल किया।

हम इसमें एक सुधार लागू करने जा रहे हैं sdkmanager। यह एक शेल स्क्रिप्ट है। यह उस स्थान पर स्थित है $android_sdk/tools/bin, जहां $android_sdkपर आपने Android SDK को अनज़िप किया है।

  1. sdkmanagerअपने पसंदीदा संपादक में खोलें ।
  2. वह रेखा ज्ञात करें जो DEFAULT_JVM_OPTSचर सेट करता है। मेरी प्रति में, यह 31 रेखा पर है:

    DEFAULT_JVM_OPTS='"-Dcom.android.sdklib.toolsdir=$APP_HOME"'
  3. चर के लिए निम्नलिखित विकल्पों को जोड़ें -XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee:। कृपया उद्धरण चिह्नों पर ध्यान दें। मेरी प्रति में, रेखा बन जाती है:

    DEFAULT_JVM_OPTS='"-Dcom.android.sdklib.toolsdir=$APP_HOME" -XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee'
  4. फ़ाइल सहेजें और संपादक को छोड़ दें।
  5. फिर से कमांड चलाएं।

यहाँ परिणाम है:

$ sdkmanager --list
Installed packages:
  Path    | Version | Description              | Location
  ------- | ------- | -------                  | ------- 
  tools   | 26.0.1  | Android SDK Tools 26.0.1 | tools/  

Available Packages:
  Path                              | Version      | Description                      
  -------                           | -------      | -------                          
  add-ons;addon-g..._apis-google-15 | 3            | Google APIs                      
  add-ons;addon-g..._apis-google-16 | 4            | Google APIs                      
  add-ons;addon-g..._apis-google-17 | 4            | Google APIs                      
  add-ons;addon-g..._apis-google-18 | 4            | Google APIs                      
  add-ons;addon-g..._apis-google-19 | 20           | Google APIs                      
  add-ons;addon-g..._apis-google-21 | 1            | Google APIs                      
  add-ons;addon-g..._apis-google-22 | 1            | Google APIs                      
  add-ons;addon-g..._apis-google-23 | 1            | Google APIs                      
  add-ons;addon-g..._apis-google-24 | 1            | Google APIs
...

होला! यह काम करता हैं!

- संपादित करें: 2017-11-07 -

कृपया ध्यान दें कि आपको रनिंग के बाद फिर से ऊपर फिक्स को लागू करने की आवश्यकता हो सकती है sdkmanager --update, क्योंकि sdkmanagerशेल स्क्रिप्ट को ओवरराइड किया जा सकता है यदि toolsपैकेज अपडेट किया गया है।

संबंधित उत्तर

  • https://stackoverflow.com/a/43574427/142239
    • @ -y-guibert ने इस काम को करने के लिए आवश्यक विकल्प बताया। उन्होंने यह भी संक्षेप में बताया कि उन रहस्यमय विकल्पों का क्या मतलब है।

1
जैसा कि JDK 9 माइग्रेशन गाइड में उल्लेख किया गया है, --add-modules java.se.eeएक अस्थायी वर्कअराउंड माना जाना चाहिए। जावा एसई और जेडीके से java.xml.bind मॉड्यूल को छोड़ने का प्रस्ताव मसौदा प्रारूप में यहां है: Bugs.openjdk.java.net/browse/JDK-8189188
एलन

11
एसडीके स्रोत फ़ाइलों को पैच करने के बजाय JAVA_OPTS, केवल पर्यावरण चर का निर्यात क्यों नहीं किया जाता है export JAVA_OPTS='-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee'?
राफा

6
एफडब्ल्यूआईडब्ल्यू, मैंने विंडोज 10 पर आज जेडीके और एंड्रॉइड एसडीके टूल्स दोनों को डाउनलोड और स्थापित किया है, और सही ढंग से चलाने के set DEFAULT_JVM_OPTS="-Dcom.android.sdklib.toolsdir=%~dp0.." -XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.eeलिए com.android.sdklib.tool.SdkManagerCliक्लास प्राप्त करने के लिए लाइन सेट करनी है
आरजे कटहबर्टसन

1
हालांकि मैं इस समाधान (मेरे लिए आसान रखने के लिए ट्रैक) पर बस गया, एक वैकल्पिक "समाधान" यहां है । एक दीर्घकालिक फिक्स अद्भुत होगा।
शेरलहोमन

4
यह -XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.eeया मैक ओएस पर जावा 11 के साथ काम नहीं करता है। मैं जावा के दूसरे संस्करण को स्थापित किए बिना इसे कैसे ठीक कर सकता हूं?
मनीष

37

आप SDKMANAGER_OPTS के साथ sdkmanager विकल्प सेट कर सकते हैं।

उदाहरण:

export SDKMANAGER_OPTS="--add-modules java.se.ee"
sdkmanager --list

4
कृपया विंडोज पर ध्यान दें कि आपको उद्धरणों को छोड़ देना चाहिए:set SDKMANAGER_OPTS=--add-modules java.se.ee
Amfasis

18
java.se.ee अब मौजूद नहीं है।
ऑस्कर

2
यह उत्तर पुराना है, कोई व्यक्ति कृपया इसे ठीक कर दे
Developerium

21

स्वीकृत उत्तर फरवरी 2019 तक पुराना है। यहां एक उत्तर दिया गया है जो sdkmanagerजावा के एक नए संस्करण में माइग्रेट होने तक काम करेगा । लेकिन तब तक, आपको यह समस्या नहीं होगी।

OpenJDK 10 OpenJDK 11 से superseeded गया था , जो लागू नहीं करता है java.se.ee सब पर । इसका मतलब यह है कि जोड़ने का हैक --add-modules java.se.eeअब कुछ नहीं करता है। इसका अर्थ यह भी है कि OpenJDK 10 को आपके सिस्टम से स्वचालित रूप से हटा दिया जाएगा और अगली बार अपडेट करते समय OpenJDK 11 के साथ बदल दिया जाएगा, यदि आपके अपडेट ठीक से कॉन्फ़िगर किए गए हैं।

जावा 8 इंस्टॉलेशन के अंदरsdkmanager सेटिंग करके जावा 8 का उपयोग करने के लिए संशोधित करें । यह डिफ़ॉल्ट रूप से, पर है ।JAVA_HOME sdkmanager~/Android/Sdk/tools/bin/sdkmanager

# Add default JVM options here. You can also use JAVA_OPTS and SDKMANAGER_OPTS to pass JVM options $
JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64
DEFAULT_JVM_OPTS='"-Dcom.android.sdklib.toolsdir=$APP_HOME" -XX:+IgnoreUnrecognizedVMOptions'
@rem Add default JVM options here. You can also use JAVA_OPTS and SDKMANAGER_OPTS to pass JVM options to this script.
set JAVA_HOME="C:\ProgramData\scoop\apps\android-studio\current\jre"
set DEFAULT_JVM_OPTS="-Dcom.android.sdklib.toolsdir=%~dp0\.."

इस तरह, आप एक साथ प्रयोग करते समय अपने सिस्टम पर जावा के एक समझदार और अनुरक्षित संस्करण का उपयोग कर सकते हैं sdkmanager

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

और अब मुझे मरम्मत के लिए कुछ पाइपलाइनें मिल गई हैं ।


इस उत्तर ने मुझे मदद की, क्योंकि मैंने Android स्टूडियो से जावा इंस्टॉलेशन के लिए JAVA_HOME शीर्ष बिंदु को अस्थायी रूप से सेट किया: C: \ Program Files \ Android \ Android Studio \ jre
clzola

2
set JAVA_HOME="...\android-studio\current\jre"विंडोज 10 पर मेरी मदद करता है जबकि अन्य सभी जवाब नहीं दिए गए हैं
नियरहस्कल

set JAVA_HOME="C:\Program Files\Android\Android Studio\jre"विंडोज 10 पर मेरे साथ काम किया। अपने Android स्टूडियो पथ का पता लगाएं। मैंने जावा 11 को अपने मूल JAVA_HOME पर सेट किया है
jj

19

सिस्टम में जावा 11 होने पर, प्रदान किए गए समाधान मान्य नहीं हैं।

यह -XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee or--add- मॉड्यूल java.xml.bind मैक ओएस पर जावा 11 के साथ काम नहीं करता है।

इस कारण से आपको जावा संस्करण को यहां से संस्करण 8 में डाउनग्रेड करना होगा: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

जावा संस्करण स्थापित करें

/usr/libexec/java_home -V

जावा 11

export JAVA_HOME=$(/usr/libexec/java_home -v 11)

जावा 1.8

export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)

फिर जाएं

cd ~/Library/Android/sdk/tools/bin

तथा

./sdkmanager --licenses

1
मैंने ऐसा किया और अभी भी त्रुटि मिलती है: आदि ... थ्रेड में अपवाद "मुख्य" java.lang.NoClassDefFoundError: javax / xml / bind / annotation / XmlSchema। मैं जावा 12.0.1 का उपयोग कर रहा हूं
james emanon

@jamesemanon शायद परिवर्तनों को लागू करने के लिए पुनः आरंभ करें। मेरे पास कोई सुराग नहीं है।
thodwris

bash: /usr/libexec/java_home: file not foundमेरे इंस्टा पर।
यूजीन जीआर। फिलिपोव

13

विंडोज के लिए, अगर कुछ भी काम नहीं करता है तो यह कोशिश करें:

  • sdkmanager.batनोटपैड के साथ खोलें ।

  • निम्नलिखित लाइन का पता लगाएँ:

    %JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %SDKMANAGER_OPTS%

  • जोड़ना --add-modules java.xml.bind

संशोधित रेखा इस तरह दिखनी चाहिए:

%JAVA_EXE%" %DEFAULT_JVM_OPTS% --add-modules java.xml.bind %JAVA_OPTS% %SDKMANAGER_OPTS%


3
खिड़कियों पर मेरे लिए काम किया 10
AntonB

10

जैसा कि हमने पिछली टिप्पणियों पर पढ़ा था कि यह त्रुटि हो रही है क्योंकि वर्तमान एसडीके संस्करण नवीनतम जावा संस्करणों: 9 और 10 के साथ असंगत है।

तो, इसे हल करने के लिए, आप अपने जावा संस्करण को जावा 8 में डाउनग्रेड कर सकते हैं या वर्कअराउंड के रूप में आप अपने टर्मिनल पर निम्न विकल्प का निर्यात कर सकते हैं:

लिनक्स:

export JAVA_OPTS='-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee'

विंडोज :

set JAVA_OPTS=-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee'

यह इस त्रुटि को हल करेगा sdkmanager

और यह स्थायी रूप से बचाया आप लिनक्स पर अपने प्रोफ़ाइल फ़ाइल में JAVA_OPTS निर्यात कर सकते हैं (बनाने के लिए .zshrc, .bashrcऔर आदि) या Windows पर वातावरण चर स्थायी रूप से के रूप में जोड़ें।


ps। यह जावा 11+ के लिए काम नहीं करता है, जिसमें जावा ईई मॉड्यूल नहीं है। इस विकल्प के लिए एक अच्छा विचार है, अपने जावा संस्करण को डाउनग्रेड करें या फ़्लटर अपडेट की प्रतीक्षा करें

रेफरी: जेडीके 11: जावा ईई मॉड्यूल के लिए सड़क का अंत


11
जब मैं यह कोशिश करता हूं, तो एक और त्रुटि हो रही है: बूट परत java.lang.module.FindException के आरंभ के दौरान त्रुटि आई: मॉड्यूल java.se.ee 'नहीं मिला
शेरिन

@SherinBinu आप किस जावा संस्करण का उपयोग कर रहे हैं?
वलदिके

1
--add-modules java.xml.bindइसके बजाय उपयोग करने का प्रयास करें--add-modules java.se.ee
Valdeci

@valdeci कि वास्तव में काम किया! आपको बहुत - बहुत धन्यवाद!
अपूर्व गोयल

10

अपडेट 2019-10:

जैसा कि इश्यू ट्रैकर में कहा गया है , Google वर्तमान JVM (9+) पर चलने वाले एक नए SDK टूल रिलीज़ पर काम कर रहा है!

आप एंड्रॉइड स्टूडियो के अंदर या Google सर्वर से मैन्युअल रूप से डाउनलोड करके नए एंड्रॉइड एसडीके कमांड-लाइन टूल्स (1.0.0) को डाउनलोड और उपयोग कर सकते हैं:

नवीनतम संस्करणों के लिए repository.xml के अंदर के URL की जाँच करें ।

यदि आप मैन्युअल रूप से कमांड लाइन टूल्स को अनपैक करते हैं, तो उन्हें अपने $ANDROID_HOME(जैसे $ANDROID_HOME/cmdline-tools/...) सबफ़ोल्डर में रखने का ध्यान रखें ।


8

जैसा कि कुछ लोगों ने पहले उल्लेख किया है, यह बहुत अच्छी तरह से एक आसान समस्या हो सकती है जो एक जावा इंस्टालेशन को दूसरे पर वरीयता देने के साथ होती है।

मेरे मामले में यह जावा 8 एक डिफ़ॉल्ट नए जावा द्वारा ओवरशेड किया जा रहा था।

मैंने जावा 8 स्थापित किया:

sudo apt-get install openjdk-8-jdk

फिर मैंने नए डिफ़ॉल्ट होने के लिए इंस्टॉल किए गए जावा को अपडेट किया:

sudo update-alternatives --config java

जिससे मैंने java 8 का id नंबर चुना।

इन (बहुत सरल) चरणों को करने के बाद, मैं बिना किसी त्रुटि के केवल sdkmanager चला सकता था।

आशा है कि यह किसी की मदद करता है!


7

Android उपकरण अभी भी JDK 9 या 10. के साथ असंगत हैं। आपको JDK 8 को स्थापित करने की आवश्यकता है या, यदि आपको कई जावा संस्करणों की आवश्यकता है, तो सुनिश्चित करें कि सिस्टम-व्यापी जावा होम JDK 8 की ओर इशारा करता है।

यहां अधिक जानकारी: Android को लक्षित करने और OSX पर निर्माण विफलताओं से बचने के लिए एकता 2017.4 को कैसे कॉन्फ़िगर करें?


5

मेरे पास एक मुश्किल समय था कि इस समाधान को केवल काम करने वाले sdkmanager.bat को जोड़ दिया जाए

@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@rem  sdkmanager startup script for Windows
@rem
@rem ##########################################################################

@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal

set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%..

@rem Add default JVM options here. You can also use JAVA_OPTS and SDKMANAGER_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS="-Dcom.android.sdklib.toolsdir=%~dp0\.."


@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome

set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto init

echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.

goto fail

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

goto fail

:init
@rem Get command-line arguments, handling Windows variants

if not "%OS%" == "Windows_NT" goto win9xME_args

:win9xME_args
@rem Slurp the command line arguments.
set CMD_LINE_ARGS=
set _SKIP=2

:win9xME_args_slurp
if "x%~1" == "x" goto execute

set CMD_LINE_ARGS=%*

:execute
@rem Setup the command line

set CLASSPATH=%APP_HOME%\lib\sdklib-25.3.1.jar;%APP_HOME%\lib\layoutlib-api-25.3.1.jar;%APP_HOME%\lib\dvlib-25.3.1.jar;%APP_HOME%\lib\repository-25.3.1.jar;%APP_HOME%\lib\gson-2.2.4.jar;%APP_HOME%\lib\commons-compress-1.8.1.jar;%APP_HOME%\lib\httpclient-4.1.1.jar;%APP_HOME%\lib\httpmime-4.1.jar;%APP_HOME%\lib\common-25.3.1.jar;%APP_HOME%\lib\kxml2-2.3.0.jar;%APP_HOME%\lib\annotations-25.3.1.jar;%APP_HOME%\lib\annotations-12.0.jar;%APP_HOME%\lib\jimfs-1.1.jar;%APP_HOME%\lib\httpcore-4.1.jar;%APP_HOME%\lib\commons-logging-1.1.1.jar;%APP_HOME%\lib\commons-codec-1.4.jar;%APP_HOME%\lib\guava-18.0.jar

@rem Execute sdkmanager
"%JAVA_EXE%" %DEFAULT_JVM_OPTS%  -XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee  %JAVA_OPTS% %SDKMANAGER_OPTS%  -classpath "%CLASSPATH%" com.android.sdklib.tool.SdkManagerCli %CMD_LINE_ARGS%

:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd

:fail
rem Set variable SDKMANAGER_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if  not "" == "%SDKMANAGER_EXIT_CONSOLE%" exit 1
exit /b 1

:mainEnd
if "%OS%"=="Windows_NT" endlocal

:omega

मुझे डर है कि यह व्यवहार्य विकल्प नहीं है क्योंकि यह काम करना बंद कर देगा जब एसडीके का नया संस्करण सामने आएगा क्योंकि इस कोड स्निपेट में हार्ड-कोडेड संस्करण हैं:set CLASSPATH=%APP_HOME%\lib\sdklib-25.3.1.jar
izogfif

4

मैं एक संपादित sdkmanager.bat फ़ाइल का उपयोग करके इस मुद्दे को हल करने में सक्षम था कि एंड्रॉइड स्टूडियो के अंदर एम्बेडेड जावा का उपयोग करने के लिए मजबूर करके, जो मैं ओपनजेडकेके का उपयोग करता है। 8. यहाँ संपादित sdkmanager का उपयोग किया गया है।

@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@rem  sdkmanager startup script for Windows
@rem
@rem ##########################################################################

@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal

set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%..

@rem Add default JVM options here. You can also use JAVA_OPTS and SDKMANAGER_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS="-Dcom.android.sdklib.toolsdir=%~dp0\.."

@rem find Java from Android Studio
@rem Find java.exe
if defined ANDROID_STUDIO_JAVA_HOME goto findJavaFromAndroidStudioJavaHome

set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto init

goto findJavaNormally

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

if exist "%JAVA_EXE%" goto init

goto findJavaNormally




@rem java from java home
@rem Find java.exe
:findJavaNormally
if defined JAVA_HOME goto findJavaFromJavaHome

set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto init

goto javaError

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

if exist "%JAVA_EXE%" goto init

goto javaDirectoryError



:javaError
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.

goto fail

:javaDirectoryError
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.

goto fail


:init
@rem Get command-line arguments, handling Windows variants

if not "%OS%" == "Windows_NT" goto win9xME_args

:win9xME_args
@rem Slurp the command line arguments.
set CMD_LINE_ARGS=
set _SKIP=2

:win9xME_args_slurp
if "x%~1" == "x" goto execute

set CMD_LINE_ARGS=%*

:execute
@rem Setup the command line

set CLASSPATH=%APP_HOME%\lib\dvlib-26.0.0-dev.jar;%APP_HOME%\lib\jimfs-1.1.jar;%APP_HOME%\lib\jsr305-1.3.9.jar;%APP_HOME%\lib\repository-26.0.0-dev.jar;%APP_HOME%\lib\j2objc-annotations-1.1.jar;%APP_HOME%\lib\layoutlib-api-26.0.0-dev.jar;%APP_HOME%\lib\gson-2.3.jar;%APP_HOME%\lib\httpcore-4.2.5.jar;%APP_HOME%\lib\commons-logging-1.1.1.jar;%APP_HOME%\lib\commons-compress-1.12.jar;%APP_HOME%\lib\annotations-26.0.0-dev.jar;%APP_HOME%\lib\error_prone_annotations-2.0.18.jar;%APP_HOME%\lib\animal-sniffer-annotations-1.14.jar;%APP_HOME%\lib\httpclient-4.2.6.jar;%APP_HOME%\lib\commons-codec-1.6.jar;%APP_HOME%\lib\common-26.0.0-dev.jar;%APP_HOME%\lib\kxml2-2.3.0.jar;%APP_HOME%\lib\httpmime-4.1.jar;%APP_HOME%\lib\annotations-12.0.jar;%APP_HOME%\lib\sdklib-26.0.0-dev.jar;%APP_HOME%\lib\guava-22.0.jar

@rem Execute sdkmanager
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %SDKMANAGER_OPTS%  -classpath "%CLASSPATH%" com.android.sdklib.tool.sdkmanager.SdkManagerCli %CMD_LINE_ARGS%

:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd

:fail
rem Set variable SDKMANAGER_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if  not "" == "%SDKMANAGER_EXIT_CONSOLE%" exit 1
exit /b 1

:mainEnd
if "%OS%"=="Windows_NT" endlocal

:omega

यहाँ मैंने एक पर्यावरण चर ANDROID_STUDIO_JAVA_HOME का उपयोग किया है जो वास्तव में JRE को एंड्रॉइड स्टूडियो में एम्बेड किए जाने के लिए इंगित करता है जैसे: ../android_studio/jre

यदि ANDROID_STUDIO_JAVA_HOME सेट नहीं है, तो यह JAVA_HOME की एक वापसी है।


2

नवीनतम संस्करण में अपग्रेड करने से पहले एंड्रॉइड एसडीके टूल्स के साथ ओपनजेडके 11 के लिए उपरोक्त के लिए लघु अतिरिक्त।

उपरोक्त समाधान मेरे लिए काम नहीं किया

set DEFAULT_JVM_OPTS="-Dcom.android.sdklib.toolsdir=%~dp0\.."

इस काम को करने के लिए मैंने मावेन रेपो से जक्सब-री (संदर्भ कार्यान्वयन) स्थापित किया है।

जानकारी दी गई थी https://github.com/javaee/jaxb-v2 करने और लिंक https://repo1.maven.org/maven2/com/sun/xml/bind/jaxb-ri/2.3.2/jaxb -ri-2.3.2.zip
इस डाउनलोड में मॉड-फोल्डर में एक स्टैंडअलोन रनटाइम कार्यान्वयन शामिल है।

मैंने mod-Folder को $ android_sdk \ tools \ lib \ में कॉपी किया और निम्न को classpath वैरिएबल में जोड़ा:

;% APP_HOME% \ lib \ आधुनिक \ jakarta.xml.bind-api.jar;% APP_HOME% \ lib \ आधुनिक \ jakarta.activation-api.jar;% APP_HOME% \ lib \ आधुनिक \ JAXB-runtime.jar;% APP_HOME% \ lib \ आधुनिक \ istack-कॉमन्स-runtime.jar;

तो अंत में ऐसा लगता है:

set CLASSPATH=%APP_HOME%\lib\dvlib-26.0.0-dev.jar;%APP_HOME%\lib\jimfs-1.1.jar;%APP_HOME%\lib\jsr305-1.3.9.jar;%APP_HOME%\lib\repository-26.0.0-dev.jar;%APP_HOME%\lib\j2objc-annotations-1.1.jar;%APP_HOME%\lib\layoutlib-api-26.0.0-dev.jar;%APP_HOME%\lib\gson-2.3.jar;%APP_HOME%\lib\httpcore-4.2.5.jar;%APP_HOME%\lib\commons-logging-1.1.1.jar;%APP_HOME%\lib\commons-compress-1.12.jar;%APP_HOME%\lib\annotations-26.0.0-dev.jar;%APP_HOME%\lib\error_prone_annotations-2.0.18.jar;%APP_HOME%\lib\animal-sniffer-annotations-1.14.jar;%APP_HOME%\lib\httpclient-4.2.6.jar;%APP_HOME%\lib\commons-codec-1.6.jar;%APP_HOME%\lib\common-26.0.0-dev.jar;%APP_HOME%\lib\kxml2-2.3.0.jar;%APP_HOME%\lib\httpmime-4.1.jar;%APP_HOME%\lib\annotations-12.0.jar;%APP_HOME%\lib\sdklib-26.0.0-dev.jar;%APP_HOME%\lib\guava-22.0.jar;%APP_HOME%\lib\mod\jakarta.xml.bind-api.jar;%APP_HOME%\lib\mod\jakarta.activation-api.jar;%APP_HOME%\lib\mod\jaxb-runtime.jar;%APP_HOME%\lib\mod\istack-commons-runtime.jar;

हो सकता है कि कुछ छोटी-मोटी त्रुटियों के कारण मैं एक परिवाद से चूक गया। लेकिन sdkmanager.bat --update या --list अब चल रहा है।


2

यह मैंने उबंटू में 18.04 में किया (कोई भी लिनक्स करेगा):

$ sudo apt-get install openjdk-8-jdk

$ sudo update-alternatives --config java
There are 2 choices for the alternative javac (providing /usr/bin/javac).

  Selection    Path                                          Priority   Status
------------------------------------------------------------
  0            /usr/lib/jvm/java-11-openjdk-amd64/bin/javac   1111      auto mode
  1            /usr/lib/jvm/java-11-openjdk-amd64/bin/javac   1111      manual mode
* 2            /usr/lib/jvm/java-8-openjdk-amd64/bin/javac    1081      manual mode

Press <enter> to keep the current choice[*], or type selection number: 2

$ export JAVA_HOME=$(/usr/lib/jvm/java-1.8.0-openjdk-amd64)

1

मेरे लिए एकमात्र कार्य समाधान एंड्रॉइड स्टूडियो के साथ भेजे गए जावा का उपयोग करना है।

JAVA_HOME सेट करें /Applications/Android\ Studio.app/Contents/jre/jdk/Contents/Home

में .bashrc

set JAVA_HOME="/Applications/Android\ Studio.app/Contents/jre/jdk/Contents/Home"

यदि आप fishशेल का उपयोग कर रहे हैं , तो इसे अंदर डालें~/.config/fish/config.fish

set -gx JAVA_HOME /Applications/Android\ Studio.app/Contents/jre/jdk/Contents/Home

(यह मैक के लिए है, लेकिन मुझे यकीन है कि इसे सही रास्ता तय करके लिनक्स और खिड़कियों के साथ काम करना चाहिए)


यह ओरेकल से जावा के मूल / गैर OpenJDK संस्करण का उपयोग करने की कोशिश कर रहे अन्य एप्लिकेशन के साथ हस्तक्षेप कर सकता है। Eventhough OpenJDK सक्षम से अधिक है, कुछ को दूसरे की भी आवश्यकता हो सकती है।
जेमशीर केडी

1

जेडीके 13.0.1, एंड्रॉइड एसडीके 29, विंडोज 10

मूल रूप से मैंने सब कुछ करने की कोशिश की, लेकिन सबसे प्रभावी और केवल 1 समाधान जो मेरे लिए काम करता था, उसे 1.8 जीडीके डाउनग्रेड करना था। मैं क्यों नहीं, यह 2020 की शुरुआत में है और नवीनतम स्पंदन संस्करण के खिलाफ 1 साल पुराने jdk संस्करण में अपग्रेड करना है। शायद समस्या विंडोज़ संस्करण में है, कारण jdk 13.0.1 ने मेरे लिए macOS 10.15.2 पर काम किया। उम्मीद है कि यह समाधान काम करता है।

डाउनलोड लिंक (JDK 1.8.0): https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html


जावा 8 मार्च 2014 में जारी किया गया था। इसलिए यह 1 वर्ष से थोड़ा अधिक पुराना है ...
pqnet

हां..लेकिन जावा 8 के बाद से ओरेकल नीति बदल गई है ..... यह अब संगठन के लिए स्वतंत्र नहीं है। तो, हर कोई
जावा

समस्या यह है कि नए जावा रनटाइम्स (9+) में ज़ैवैक्स लाइब्रेरी नहीं हैं, आप उन्हें अपने एप्लिकेशन के साथ शिप करने वाले हैं। इसलिए सॉफ्टवेयर लिखा है कि java 8 पर चलने की अपेक्षा करें और इन पुस्तकालयों को शिप न करें, और इस तरह यह 9+ पर काम नहीं करेगा। कारण, जैसा कि आपने अनुमान लगाया है, मानक JDK को पूरी तरह से खुला स्रोत बनाने के लिए है (ये पुस्तकालय जीपीएल नहीं हैं), इसलिए मैं कहूंगा कि लाइसेंस शर्तों में सुधार हुआ है।
pqnet

1

अपने .bashrc या .zshrc में विभिन्न JDK संस्करणों की होम निर्देशिकाओं को परिभाषित करें:

export JAVA_8_HOME=$(/usr/libexec/java_home -v1.8)
export JAVA_14_HOME=$(/usr/libexec/java_home -v14)

सबसे पहले JDK वर्जन का इस्तेमाल करें 8. इस लाइन को sdkmanagerफाइल के ऊपर रखें :

export JAVA_HOME=$JAVA_8_HOME

वापस JDK संस्करण 14 पर लौटें। इस लाइन को sdkmanagerफाइल के नीचे रखें :

export JAVA_HOME=$JAVA_14_HOME

1

यह जावा 11 और इसके बाद के संस्करण के लिए यह काम करने का उत्तर है क्योंकि पूरे JAXB API को हटा दिया गया था।

जकार्ता XML बाइंडिंग डाउनलोड करें , विशेष रूप से यह ज़िप फ़ाइल। आपको मॉड फ़ोल्डर के भीतर केवल 3 फ़ाइलों की आवश्यकता है अर्थात jakarta.activation.jar, jakarta.xml.bind-api.jar और jakarta.xml.bind-api.jar और आप बाकी को टॉस कर सकते हैं।

इन फ़ाइलों को APP_HOME / lib फ़ोल्डर में ले जाएँ। मैंने इसके लिए एक सब फ़ोल्डर jaxb बनाया । तो, मेरे macOS सिस्टम पर यह था: $ HOME / Library / Android / sdk / tools / lib / jaxb

अब अपने पसंदीदा टेक्स्ट एडिटर का उपयोग करके sdkmanager खोलें और CLASSPATH के तहत = शुरुआत में निम्नलिखित जोड़ें:

$APP_HOME/lib/jaxb/jakarta.activation.jar:$APP_HOME/lib/jaxb/jakarta.xml.bind-api.jar:$APP_HOME/lib/jaxb/jaxb-impl.jar

इस तरह यह समाप्त हो गया:

CLASSPATH=$APP_HOME/lib/jaxb/jakarta.activation.jar:$APP_HOME/lib/jaxb/jakarta.xml.bind-api.jar:$APP_HOME/lib/jaxb/jaxb-impl.jar:$APP_HOME/lib/dvlib-26.0.0-dev.jar:$APP_HOME/lib/jimfs-1.1.jar:$APP_HOME/lib/jsr305-1.3.9.jar:$APP_HOME/lib/repository-26.0.0-dev.jar:$APP_HOME/lib/j2objc-annotations-1.1.jar:$APP_HOME/lib/layoutlib-api-26.0.0-dev.jar:$APP_HOME/lib/gson-2.3.jar:$APP_HOME/lib/httpcore-4.2.5.jar:$APP_HOME/lib/commons-logging-1.1.1.jar:$APP_HOME/lib/commons-compress-1.12.jar:$APP_HOME/lib/annotations-26.0.0-dev.jar:$APP_HOME/lib/error_prone_annotations-2.0.18.jar:$APP_HOME/lib/animal-sniffer-annotations-1.14.jar:$APP_HOME/lib/httpclient-4.2.6.jar:$APP_HOME/lib/commons-codec-1.6.jar:$APP_HOME/lib/common-26.0.0-dev.jar:$APP_HOME/lib/kxml2-2.3.0.jar:$APP_HOME/lib/httpmime-4.1.jar:$APP_HOME/lib/annotations-12.0.jar:$APP_HOME/lib/sdklib-26.0.0-dev.jar:$APP_HOME/lib/guava-22.0.jar

और यह बहुत ज्यादा है, इस मुद्दे को हल करना चाहिए।

मैंने ये कदम इसलिए उठाया क्योंकि flutter doctor --android-licensesमुझे मुद्दे दिए जा रहे थे। और यह तय किया।


0

https://adoptopenjdk.net वर्तमान में संस्करण 8 से जेडीके के सभी वितरणों का समर्थन करता है। उदाहरण के लिए https://adoptopenjdk.net/releases.html#x64_win

यहाँ एक उदाहरण दिया गया है कि मैं sdkmanager के साथ JDK संस्करण 8 का उपयोग करने में कैसे सक्षम था और बहुत कुछ: https://travis-ci.com/mmcc007/screenshots/builds/109365628

JDK 9 के लिए (और मुझे लगता है कि 10, और संभवतः 11, लेकिन 12 और उससे आगे नहीं), निम्नलिखित sdkmanager को काम करने के लिए काम करना चाहिए:

export SDKMANAGER_OPTS="--add-modules java.se.ee"
sdkmanager --list

1
एसडीके 12 के लिए इसे ठीक करने का कोई विचार?
रिची

@ रीची क्या आपने इसे हल किया है, मेरे पास भी जावा 12 है और इस मुद्दे पर चल रहा है और यहां पोस्ट किया गया कुछ भी मदद नहीं कर रहा है।
james emanon

1
जैसा कि मुझे याद है, मुझे लगता है कि आपको jar फ़ाइल डाउनलोड करनी होगी जिसमें java.se.ee है और इसे पथ (या इसके समान) में जोड़ें। AFAIK Oracle ने JDK से 12 और उससे आगे के लिए J2EE से संबंधित जार को हटा दिया। Sdkmanager के साथ यह परीक्षण नहीं किया।
एममेकबे

@jamesemanon मैंने इसे हल करने का प्रबंधन नहीं किया। उपरोक्त सुझाव आज़माएं
रिची

0

इस त्रुटि का एक और समाधान संभव है कि आप अपने जावा संस्करण की जांच करें, हो सकता है कि आप इसे इस jdk oracle-jdk-8 को डाउनलोड करने के लिए हल कर सकें , यह मेरी गलती थी: P


0

आपको बस jaxb har files को install करना होगा और classpath में शामिल करना होगा। यह जावा 11 से 12 नवीनतम में काम करता है।

उन लोगों के लिए जो मुझे ठीक करने के लिए देख रहे हैं, उन्होंने जीथब में कुछ मदद की उम्मीद की। और लिंक भी प्रदान किए गए हैं।

https://gist.github.com/Try-Parser/b7106d941cc9b1c9e7b4c7443a7c3540


0

मैं जावा 8 एसडीके डाउनलोड करता हूं

  1. unistall जावा sdk previuse
  2. एंड्रॉइड स्टूडियो बंद करें
  3. जावा स्थापित करें ava
  4. रन-> cmd-> flutter doctor --install -licenses और उसके बाद
flutter doctor
Doctor summary (to see all details, run flutter doctor -v):
[√] Flutter (Channel stable, v1.12.13+hotfix.9, on Microsoft Windows [Version 10.0.19041.388], locale en-US)
[√] Android toolchain - develop for Android devices (Android SDK version 29.0.3)
[√] Android Studio (version 4.0)
[√] VS Code (version 1.47.3)
[!] Connected device
    ! No devices available

! Doctor found issues in 1 category
display  and finish

0

जाहिरा तौर पर यदि आप 3.6.0 से अधिक "कमांडलाइनलेट्स" संस्करण का उपयोग करते हैं तो आप एंड्रॉइड एसडीके घटकों को स्थापित करने के लिए JDK11 + का उपयोग कर सकते हैं।

वे यहां उपलब्ध हैं: https://developer.android.com/studio#command-tools

आधिकारिक इश्यू ट्रैकर ने कहा कि यह तय है: https://issuetracker.google.com/issues/122210344#comment11


-1

यह बहुत सरल है, बस JAVA_HOMEपर्यावरण चर निर्यात करें , अपने JDK स्थापना के पथ पर सेट करें।

मैंने Ubuntu पर मैन्युअल रूप से जावा स्थापित किया है, और इसलिए मेरे लिए यह ऐसा दिखता है:

export JAVA_HOME="$HOME/pkg-src/jdk1.8.0_251"

और सुनिश्चित करें कि यह आपके मार्ग में भी मौजूद है ...

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