无法使用Java 9

时间:2017-11-07 05:11:40

标签: java android android-sdk-tools java-9 android-sdk-manager

我下载并安装了:

    来自Oracle here
  • JDK(jdk-9.0.1_osx-x64_bin.dmg
  • 来自Google here的Android SDK(sdk-tools-darwin-3859397.zip)。

配置PATH变量后,我尝试运行sdkmanager,它替换了用于管理SDK组件的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版本:

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

有没有人知道如何修复它而不回到Java 8?

相关问题

27 个答案:

答案 0 :(得分:127)

this answer的帮助下,我成功解决了问题。

我们将在sdkmanager中应用修复程序。这是一个shell脚本。它位于$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. 再次运行命令。
  6. 结果如下:

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

    HOLA!它有效!

    - 编辑:2017-11-07 -

    请注意,您可能需要在运行sdkmanager --update后再次应用上述修补程序,因为如果sdkmanager程序包已更新,则可能会覆盖tools shell脚本。

    相关答案

答案 1 :(得分:27)

您可以使用SDKMANAGER_OPTS设置sdkmanager选项。

示例:

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

答案 2 :(得分:11)

对于Windows,如果没有任何作用,请尝试以下操作:

  • 使用记事本打开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 :(得分:7)

当我们阅读前面的评论时,会发生此错误,因为当前的SDK版本与最新的Java版本9和10不兼容。

因此,要解决此问题,您可以将Java版本降级为Java 8,或者作为一种变通办法,可以在终端上导出以下选项:

Linux:

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

Windows

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

这将解决sdkmanager

的错误

要使其永久保存,您可以将JAVA_OPTS导出到Linux上的配置文件中(.zshrc.bashrc等),或在Windows上永久添加为环境变量。


ps。。这不适用于Java 11+,因为Java 11+没有Java EE模块。使用此选项是个好主意,请降级Java版本或等待Flutter update

参考:JDK 11: End of the road for Java EE modules

答案 4 :(得分:6)

更新2019-10:

stated in the issue tracker一样,Google正在开发可在当前JVM(9+)上运行的新SDK工具版本!

您已经可以在Android Studio内部的canary通道上下载并使用新的 Android SDK命令行工具(版本1.0.0 rc1),也可以通过从Google服务器手动下载它们来

对于最新版本,请检查repository.xml内的URL。

如果您手动解压缩命令行工具,请注意将其放在$ANDROID_HOME(例如$ANDROID_HOME/cmdline-tools/...)内的子文件夹中。

答案 5 :(得分: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

答案 6 :(得分:4)

可接受的答案截止到2019年2月已过期。Here's an answersdkmanager迁移到Java的较新版本之前一直有效。但是到那时,您将不再有这个问题。

  

OpenJDK 10 was superseeded by OpenJDK 11,它根本没有实现java.se.ee 。这意味着添加--add-modules java.se.ee的hack不再起作用。这也意味着,如果配置正确,则下次更新时,OpenJDK 10将自动从系统中删除,并由OpenJDK 11替换。

     

通过将sdkmanager JAVA_HOME设置为Java 8安装,修改sdkmanager以使用Java 8。默认情况下,它位于~/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\.."
     

这样,您可以在系统上继续使用健全且维护良好的Java版本,同时使用sdkmanager

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

现在我要修理一些pipelines

答案 7 :(得分:4)

Android Tools仍然与JDK 9或10不兼容。您需要安装JDK 8,或者,如果您需要多个Java版本,请确保系统范围的Java主目录指向JDK 8.

此处有更多详情:How to configure Unity 2017.4 to target Android and avoid build failures on OSX?

答案 8 :(得分:4)

就像某些人之前提到的那样,与一个优先于另一个的Java安装有关,这可能是一个更简单的问题。

在我的情况下,是Java 8被默认的较新Java所遮盖。

我安装了Java 8:

sudo apt-get install openjdk-8-jdk

然后我将安装的java更新为新的默认值:

sudo update-alternatives --config java

因此我选择了Java 8的ID号。

完成这些(非常简单的)步骤之后,我可以运行sdkmanager而不会出错。

希望这对某人有帮助!

答案 9 :(得分:3)

这是我在Ubuntu 18.04中所做的(任何Linux都可以做到):

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

答案 10 :(得分:2)

系统中装有Java 11时,提供的解决方案无效。

-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee or-add-modules java.xml.bind在Mac OS上不适用于Java 11。

因此,您必须将Java版本从此处降级为版本8:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

列出已安装的Java版本

/usr/libexec/java_home -V

Java 11

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

Java 1.8

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

然后转到

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

./sdkmanager --licenses

答案 11 :(得分:2)

(WINDOWS)

如果您已经安装了Android Studio,请转到File >> Project Structure... >> SDK位置。

转到该位置+ \cmdline-tools\latest\bin 将路径复制到Environment Variables

那么可以使用命令行工具。

答案 12 :(得分:2)

这是使Java 11及更高版本有效的答案,因为删除了整个JAXB API。

下载Jakarta XML Binding,特别是this zip文件。您只需要mod文件夹中的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给了我一些问题。这样就解决了。

答案 13 :(得分:1)

我能够通过强制使用嵌入在Android Studio Itself中的Java来使用已编辑的sdkmanager.bat文件来解决此问题,我假定它使用的是OpenJDK8。这是我使用的已编辑sdkmanager:

jQuery('.myitems').each(function (index) {
    const count = {}
    count[myitem + index] = [jQuery(this).text()];
    console.log(count[myitem + index]);

});

在这里,我使用了一个环境变量ANDROID_STUDIO_JAVA_HOME,该变量实际上指向嵌入在android studio中的JRE,例如:../ android_studio / jre

如果未设置ANDROID_STUDIO_JAVA_HOME,则这也将回退到JAVA_HOME。

答案 14 :(得分:1)

在升级到最新版本之前,使用android sdk工具对openJDK 11进行上述补充。

上述解决方案对我不起作用

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

为使此工作正常进行,我从maven存储库中安装了jaxb-ri(参考实现)。

为信息提供了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中的独立运行时实现。

我将mod文件夹复制到$ android_sdk \ tools \ lib \,并将以下内容添加到classpath变量中:

;%APP_HOME%\ lib \ mod \ jakarta.xml.bind-api.jar;%APP_HOME%\ lib \ mod \ jakarta.activation-api.jar;%APP_HOME%\ lib \ mod \ jaxb运行时。 jar;%APP_HOME%\ lib \ mod \ istack-commons-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;

也许我由于某个小错误而错过了一个lib。但 sdkmanager.bat --update或--list正在运行。

答案 15 :(得分:1)

对我而言,唯一可行的解​​决方案是使用Android Studio随附的Java。

将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 Shel,请将其放在~/.config/fish/config.fish

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

(这是用于Mac的,但我确信它可以通过设置正确的路径在Linux和Windows上工作)

答案 16 :(得分:1)

JDK 13.0.1,Android SDK 29,Windows 10

基本上,我尝试了所有方法,但最有效且唯一有效的解决方案之一是降级到jdk 1.8。我不知道为什么,这是2020年初,必须将Jdk版本降级为最新的flutter版本。也许问题出在Windows版本中,导致jdk 13.0.1在macOS 10.15.2上为我工作。希望此解决方案有效。

下载链接(JDK 1.8.0): https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

答案 17 :(得分: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

答案 18 :(得分:0)

您只需要安装jaxb har文件并将其包含在类路径中即可。这适用于最新的Java 11至12。

对于那些正在寻找解决方案的人,我在github上提出了一些要点,希望对您有所帮助。并且还提供了链接。

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

答案 19 :(得分:0)

通过 Android Studio 在 SDK 管理器中安装命令行工具。

Installing Command-line Tools

然后从 cmdline-tools 目录(而不是 tools 目录)运行 SDK Manager 版本。

$ANDROID_HOME/tools/bin/sdkmanager                --version # BAD! (java.lang.NoClassDefFoundError)
$ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager --version # GOOD!

答案 20 :(得分:0)

对于 mac 用户,我通过修改我的 zshrc 文件并添加以下内容(尽管您的 java_home 可能配置不同)解决了与此类似的问题:

export JAVA_HOME=$(/usr/libexec/java_home)
export ANDROID_HOME=/Users/YOURUSER/Library/Android/sdk
export PATH=$PATH:/Users/YOURUSER/Library/Android/sdk/tools
export PATH=$PATH:%ANDROID_HOME%\tools
export PATH=$PATH:/Users/YOURUSER/Library/Android/sdk

答案 21 :(得分:0)

显然,如果您使用的“ commandlinetools”版本高于3.6.0,则可以使用JDK11 +安装Android SDK组件。

可在此处找到它们:https://developer.android.com/studio#command-tools

官方问题跟踪工具说它已修复:https://issuetracker.google.com/issues/122210344#comment11

答案 22 :(得分:0)

我下载了Java 8 SDK

  1. unistall java sdk previuse
  2. 关闭android studio
  3. 安装Java 8
  4. 运行-> Toast.makeText ( getActivity().... 和之后
cmd-> flutter doctor --install -licenses

答案 23 :(得分:0)

该错误的另一种解决方案是检查您的Java版本,也许您可​​以下载jdk oracle-jdk-8来解决它,这是我的错误:P

答案 24 :(得分:0)

https://adoptopenjdk.net当前支持从版本8开始的所有JDK发行版。 例如https://adoptopenjdk.net/releases.html#x64_win

这是一个示例,说明我如何将JDK版本8与sdkmanager一起使用:https://travis-ci.com/mmcc007/screenshots/builds/109365628

对于JDK 9(我认为是10,可能是11,但不是12,甚至更高),以下应该可以使sdkmanager工作:

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

答案 25 :(得分:-1)

转到 {SDK_FOLDER}/lib/_/(下划线文件夹)。将 _ 文件夹中的所有文件复制到其父文件夹 /lib

答案 26 :(得分:-2)

这非常简单,只需导出JAVA_HOME环境变量,并将其设置为JDK安装路径即可。

我在Ubuntu上手动安装了Java,因此对我来说,像这样:

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

并确保它也存在于您的路径中...

export PATH="$PATH:$JAVA_HOME"