Kotlin 在 Java 安装中找不到所需的 JDK 工具
Posted
技术标签:
【中文标题】Kotlin 在 Java 安装中找不到所需的 JDK 工具【英文标题】:Kotlin could not find the required JDK tools in the Java installation 【发布时间】:2019-08-12 16:02:52 【问题描述】:运行 ./gradlew clean build
时,我收到以下消息:
> Task :compileKotlin FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':compileKotlin'.
> Kotlin could not find the required JDK tools in the Java installation '/usr/lib/jvm/java-8-openjdk-amd64/jre' used by Gradle. Make sure Gradle is running on a JDK, not JRE.
我有 JDK,JAVA_HOME
设置正确,update-alternatives
设置正确。
# java -version
openjdk version "1.8.0_191"
OpenJDK Runtime Environment (build 1.8.0_191-8u191-b12-2ubuntu0.16.04.1-b12)
OpenJDK 64-Bit Server VM (build 25.191-b12, mixed mode)
# update-alternatives --config java
There are 3 choices for the alternative java (providing /usr/bin/java).
Selection Path Priority Status
------------------------------------------------------------
* 0 /usr/lib/jvm/default-java/bin/java 1100 auto mode
1 /usr/lib/jvm/default-java/bin/java 1100 manual mode
2 /usr/lib/jvm/java-8-openjdk-amd64/bin/java 1 manual mode
3 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java 1081 manual mode
这是启用了堆栈跟踪的 gradle 构建:
* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':compileKotlin'.
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:110)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:77)
at org.gradle.api.internal.tasks.execution.OutputDirectoryCreatingTaskExecuter.execute(OutputDirectoryCreatingTaskExecuter.java:51)
at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:59)
at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54)
at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:59)
at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:101)
at org.gradle.api.internal.tasks.execution.FinalizeInputFilePropertiesTaskExecuter.execute(FinalizeInputFilePropertiesTaskExecuter.java:44)
at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:91)
at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:62)
at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:59)
at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54)
at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.run(EventFiringTaskExecuter.java:51)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:300)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:292)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:174)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:46)
at org.gradle.execution.taskgraph.LocalTaskInfoExecutor.execute(LocalTaskInfoExecutor.java:42)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareWorkItemExecutor.execute(DefaultTaskExecutionGraph.java:277)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareWorkItemExecutor.execute(DefaultTaskExecutionGraph.java:262)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:135)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:130)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker.execute(DefaultTaskPlanExecutor.java:200)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker.executeWithWork(DefaultTaskPlanExecutor.java:191)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker.run(DefaultTaskPlanExecutor.java:130)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.process(DefaultTaskPlanExecutor.java:74)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph.execute(DefaultTaskExecutionGraph.java:143)
at org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java:40)
at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:40)
at org.gradle.execution.DefaultBuildExecuter.access$000(DefaultBuildExecuter.java:24)
at org.gradle.execution.DefaultBuildExecuter$1.proceed(DefaultBuildExecuter.java:46)
at org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:49)
at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:40)
at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:33)
at org.gradle.initialization.DefaultGradleLauncher$ExecuteTasks.run(DefaultGradleLauncher.java:355)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:300)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:292)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:174)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
at org.gradle.initialization.DefaultGradleLauncher.runTasks(DefaultGradleLauncher.java:219)
at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:149)
at org.gradle.initialization.DefaultGradleLauncher.executeTasks(DefaultGradleLauncher.java:124)
at org.gradle.internal.invocation.GradleBuildController$1.call(GradleBuildController.java:77)
at org.gradle.internal.invocation.GradleBuildController$1.call(GradleBuildController.java:74)
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:154)
at org.gradle.internal.work.StopShieldingWorkerLeaseService.withLocks(StopShieldingWorkerLeaseService.java:38)
at org.gradle.internal.invocation.GradleBuildController.doBuild(GradleBuildController.java:96)
at org.gradle.internal.invocation.GradleBuildController.run(GradleBuildController.java:74)
at org.gradle.tooling.internal.provider.ExecuteBuildActionRunner.run(ExecuteBuildActionRunner.java:28)
at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
at org.gradle.tooling.internal.provider.ValidatingBuildActionRunner.run(ValidatingBuildActionRunner.java:32)
at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner$3.run(RunAsBuildOperationBuildActionRunner.java:50)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:300)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:292)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:174)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner.run(RunAsBuildOperationBuildActionRunner.java:45)
at org.gradle.tooling.internal.provider.SubscribableBuildActionRunner.run(SubscribableBuildActionRunner.java:51)
at org.gradle.launcher.exec.InProcessBuildActionExecuter$1.transform(InProcessBuildActionExecuter.java:47)
at org.gradle.launcher.exec.InProcessBuildActionExecuter$1.transform(InProcessBuildActionExecuter.java:44)
at org.gradle.composite.internal.DefaultRootBuildState.run(DefaultRootBuildState.java:79)
at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:44)
at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:30)
at org.gradle.launcher.exec.BuildTreeScopeBuildActionExecuter.execute(BuildTreeScopeBuildActionExecuter.java:39)
at org.gradle.launcher.exec.BuildTreeScopeBuildActionExecuter.execute(BuildTreeScopeBuildActionExecuter.java:25)
at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:80)
at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:53)
at org.gradle.tooling.internal.provider.ServicesSetupBuildActionExecuter.execute(ServicesSetupBuildActionExecuter.java:62)
at org.gradle.tooling.internal.provider.ServicesSetupBuildActionExecuter.execute(ServicesSetupBuildActionExecuter.java:34)
at org.gradle.tooling.internal.provider.GradleThreadBuildActionExecuter.execute(GradleThreadBuildActionExecuter.java:36)
at org.gradle.tooling.internal.provider.GradleThreadBuildActionExecuter.execute(GradleThreadBuildActionExecuter.java:25)
at org.gradle.tooling.internal.provider.ParallelismConfigurationBuildActionExecuter.execute(ParallelismConfigurationBuildActionExecuter.java:43)
at org.gradle.tooling.internal.provider.ParallelismConfigurationBuildActionExecuter.execute(ParallelismConfigurationBuildActionExecuter.java:29)
at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:59)
at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:31)
at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:59)
at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:44)
at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:46)
at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:30)
at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:67)
at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:122)
at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:37)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:122)
at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:26)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:122)
at org.gradle.launcher.daemon.server.exec.RequestStopIfSingleUsedDaemon.execute(RequestStopIfSingleUsedDaemon.java:34)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:122)
at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:74)
at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:72)
at org.gradle.util.Swapper.swap(Swapper.java:38)
at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:72)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:122)
at org.gradle.launcher.daemon.server.exec.LogAndCheckHealth.execute(LogAndCheckHealth.java:55)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:122)
at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:62)
at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:122)
at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:81)
at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:122)
at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:50)
at org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run(DaemonStateCoordinator.java:295)
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
Caused by: org.gradle.api.GradleException: Kotlin could not find the required JDK tools in the Java installation '/usr/lib/jvm/java-8-openjdk-amd64/jre' used by Gradle. Make sure Gradle is running on a JDK, not JRE.
at org.jetbrains.kotlin.gradle.tasks.JarSearchingUtilKt.findToolsJar(jarSearchingUtil.kt:95)
at org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompile.execute(Tasks.kt:255)
at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73)
at org.gradle.api.internal.project.taskfactory.IncrementalTaskAction.doExecute(IncrementalTaskAction.java:50)
at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:39)
at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:26)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$1.run(ExecuteActionsTaskExecuter.java:131)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:300)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:292)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:174)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:120)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:99)
... 111 more
Caused by: java.lang.ClassNotFoundException: com.sun.tools.javac.util.Context
at org.jetbrains.kotlin.gradle.tasks.JarSearchingUtilKt.findToolsJar(jarSearchingUtil.kt:92)
... 124 more
所以据我所见,在搜索 tools.jar
时失败了 - 我在 /usr/lib/jvm/default-java/lib
下,因为配置的路径是 JDK。
我的gradle.build
- 以防万一:
plugins
id 'org.jetbrains.kotlin.jvm' version '1.3.11'
ext
ktorVersion = "1.1.2"
group 'com.example'
version '1.0-SNAPSHOT'
repositories
jcenter()
mavenCentral()
dependencies
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
implementation "io.ktor:ktor-server-netty:$ktorVersion"
implementation "io.ktor:ktor-jackson:$ktorVersion"
implementation "io.ktor:ktor-freemarker:$ktorVersion"
implementation "io.ktor:ktor-auth:$ktorVersion"
implementation "ch.qos.logback:logback-classic:1.2.3"
implementation 'io.github.microutils:kotlin-logging:1.6.22'
implementation 'org.koin:koin-ktor:2.0.0-beta-3'
implementation 'org.litote.kmongo:kmongo-coroutine:3.10.0'
compileKotlin
kotlinOptions.jvmTarget = "1.8"
compileTestKotlin
kotlinOptions.jvmTarget = "1.8"
我真的很茫然,希望能得到一些帮助。
如果需要更多信息,请告诉我,我会尽力提供。
【问题讨论】:
您知道如何解决吗?因为我已经和它打了两天了,不知道是怎么回事。 【参考方案1】:根据提供的数据,可以确定java
在环境路径中。但是,它并没有确认 JAVA_HOME 设置为 JDK 目录。您确定JAVA_HOME
没有设置为/usr/lib/jvm/java-8-openjdk-amd64/jre
而不是/usr/lib/jvm/java-8-openjdk-amd64
或/usr/lib/jvm/default-java
?
因为,如果设置了JAVA_HOME
,那么 gradlew 将忽略 PATH 中的java
二进制文件并执行$JAVA_HOME/bin/java
,而System.getProperty("java.home")
又将在此异常中记录(见jarSearchingUtil.Kt)
否则,你可以尝试在gradlew文件中直接声明JAVA_HOME
【讨论】:
【参考方案2】:我遇到了完全相同的问题。我通过安装OpenJDK 8 JDK
解决了这个问题。我的机器正在运行centos
所以这是我的安装命令
sudo yum install java-1.8.0-openjdk-devel
。
我从article 了解到有两个不同的 Java 包,Java 运行时环境 (JRE) 和 Java 开发工具包 (JDK)。 JRE 用于运行 Java 程序,JDK 用于开发 Java 应用程序。我只安装了 JRE,但没有安装 JDK。安装JDK后,我的构建运行成功
【讨论】:
@IgorGanapolsky,yum 是 Cent OS 的包管理器。【参考方案3】:在 Windows 上,将其添加到 gradle.properties,以及您的 jdk 版本
org.gradle.java.home=C:\\Program Files\\Java\\jdk1.8.0_102
【讨论】:
这是特定于 Windows 和某个 Java 版本的 谢谢。我不记得我使用的 java 版本。但这解决了我的问题。 非常感谢老兄...它的工作就像一个魅力,你拯救了我的一天【参考方案4】:> Kotlin could not find the required JDK tools in the Java installation '/usr/lib/jvm/java-8-openjdk-amd64/jre' used by Gradle. Make sure Gradle is running on a JDK, not JRE.
设置为/usr/lib/jvm/java-8-openjdk-amd64/jre
。
应该将 JAVA_HOME 设置为/usr/lib/jvm/java-8-openjdk-amd64/
如果您的操作系统是 Ubuntu,请通过sudo apt-get install openjdk-8-jdk
安装 openjdk jdk
sudo apt install openjdk-8-jre-headless
将安装 jre,而不是 jdk
【讨论】:
另外,在安装 jdk 版本之前卸载 jre 版本可能会有所帮助,因为它们共享相同的父路径,并且我尝试在不删除 jre 的情况下安装 jdk,但这并没有解决问题。 【参考方案5】:我在 MacOS (Big Sur) 中解决了类似的问题。就我而言,我正在运行一个 React Native 项目,并在尝试构建到 android 时遇到以下错误:
* What went wrong:
Execution failed for task ':bugsnag_react-native:compileDebugKotlin'.
> Kotlin could not find the required JDK tools in the Java installation '/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home' used by G
radle. Make sure Gradle is running on a JDK, not JRE.
我关注this article 在 MacOS 上卸载 JRE。稍作修改以使过程可逆,以下是步骤:
cd /Library/Internet\ Plug-Ins/
mv JavaAppletPlugin.plugin DELETED-JavaAppletPlugin.plugin
cd /Library/PreferencePanes/
mv JavaControlPanel.prefPane DELETED-JavaControlPanel.prefPane
当您收到Permission denied
时,请在命令前使用sudo
。
然后我清除了我的 Gradle 文件夹。我不知道这是否有必要,但它对我有用:
rm -rf ~/.gradle
最后,我重建了我的项目 (react-native run-android
),一切正常。
我不确定删除 JRE 是不是最好的解决方案,因为您可能需要 JRE 来处理其他事情,但我没有注意到任何不良影响。此外,我似乎已经安装了 JDK,这可能不适用于所有 Mac 用户。
由于 Stack Overflow 上没有任何好的答案可以解决 MacOS 上的这个问题,我想我会在这里发布我的解决方案。
【讨论】:
我在更新到 Big Sur 后遇到了完全相同的问题。这为我省去了很多挫败感。 卸载所有 java osxdaily.com/2017/06/16/uninstall-java-mac 并重新安装帮助我在 Big Sure 上升级 MacOS 后解决了这个问题 这对我有用,正如 MacOS Big Sur 中提到的那样。我也省略了清除 gradle 文件夹。谢谢! 谢谢你救了我……每次 Apple 进行重大更新时,一些 JDK/gradle/……东西都会中断 你把我从疯狂的挫折中拯救了出来。谢谢你【参考方案6】:我通过删除一种java版本解决了这个问题。
我有 2 种 Java,如下图所示。
但是我在执行./gradlew clean assembleRelease
时遇到了错误,这提醒我可能问题出在我使用的哪个JDK 上。
然后,我发现2种java的home的内容是不一样的。左边是我从Oracle下载的。
所以,我尝试通过删除第一个 java 的 home 来修复它。(首先压缩文件夹以进行复制)。
成功了!
【讨论】:
【参考方案7】:在 MacOS 更新到 Big Sur 之后,我看到了与上面的 Tom Aranda 相同的问题。 经过进一步调查,我遇到了this SO post,这让我找到了this radar。根据 Tom 的回答,我不乐意删除 JRE,因此我使用其他帖子中的详细信息解决了我自己的安装问题.....
我之前对JAVA_HOME
的声明是在~/.zshrc
as
export JAVA_HOME=`/usr/libexec/java_home -v 1.8`
但 Big Sur 似乎也将默认 JRE 版本更新为 1.8。所以我的 JAVA_HOME 需要更精确的过滤。
% /usr/libexec/java_home -V
Matching Java Virtual Machines (2):
1.8.251.08 (x86_64) "Oracle Corporation" - "Java" /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home
1.8.0_241 (x86_64) "Oracle Corporation" - "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_241.jdk/Contents/Home
/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home
我现在导出为
export JAVA_HOME=`/usr/libexec/java_home -v 1.8.0_241`
现在这并不理想,因为它会在我下次更新 JDK 时中断。
根据雷达和其他 SO 帖子中的详细信息,我还需要确保在再次导出之前未设置任何现有导出的 JAVA_HOME,因此我在 ~/.zshrc
中的新条目现在变为
unset JAVA_HOME;export JAVA_HOME=`/usr/libexec/java_home -v 1.8.0_241`
重新启动终端后,我之前失败的 gradlew
命令现在可以正常运行了。
对我来说,这感觉像是一个更好的解决方案,因为我没有删除任何库,而且我只是从我自己的终端命令影响了 java home。很遗憾,我需要指定精确的版本,因为这将在未来的某个时候中断。
【讨论】:
【参考方案8】:在 open jdk 8 中遇到这个问题,切换到 open jdk 11 为我解决了这个问题。
export JAVA_HOME="/usr/lib/jvm/java-11-openjdk-amd64/"
【讨论】:
【参考方案9】:android studio 也提供 jdk。 如果你像下面这样指定那个jdk,它就会成功
export PATH=$PATH:/Applications/"Android Studio.app"/Contents/jre/jdk/Contents/Home/bin
export JAVA_HOME=/Applications/"Android Studio.app"/Contents/jre/jdk/Contents/Home
【讨论】:
这应该是公认的答案,不需要安装另一个JVM 这对我有用,但现在我收到一条错误消息,指出在 android studio 更新后路径无效。我需要将第二行更改为export JAVA_HOME=/Applications/"Android Studio.app"/Contents/jre/Contents/Home
这对我有用,如果有人确定他有 java 所以这是正确的答案
这绝对是带有@James 更新的 Mac 的答案【参考方案10】:
在 BIG SUR 上遇到此错误的人可能已经安装了自定义 java。使用以下内容将其删除
sudo rm -fr /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin
sudo rm -fr /Library/PreferencesPanes/JavaControlPanel.prefPane
sudo rm -fr ~/Library/Application\ Support/Oracle/Java
之后,取消设置您拥有的任何自定义 JAVA_HOME 并将其从 shell 中删除,它应该会再次开始工作。
【讨论】:
这对我有用。我还从 Oracle 下载并安装了我需要的 JDK。在我运行上述命令之前,我的命令仍然被破坏。 谢谢,伙计!它也对我有用! 对我来说也是如此:P 非常感谢! 谢谢。我不得不删除自定义安装并将 Java 主页设置为使用 Big Sur 的 java 8。【参考方案11】:这给了我错误 FAILURE:构建失败并出现异常。 * 出了什么问题:任务 ':app:compileDebugKotlin' 执行失败。 > Kotlin 在 Gradle 使用的 Java 安装 'C:\Program Files\Java\jre1.8.0_281' 中找不到所需的 JDK 工具。确保 Gradle 在 JDK 而不是 JRE 上运行
我通过下载并安装 Java SE Development Kit 8 解决了这个问题 并在路径中创建安装的文件夹后 C:\Program Files\Java\jdk1.8.0_281
【讨论】:
【参考方案12】:如果您使用的是 Mac,诀窍是从 Oracle 安装 JDK,他们现在正在更改许可证政策,因此显然它不再完全免费用于商业用途。 也就是说,安装后,您会在 MAC 上的以下位置找到 JDK:“/Library/Java/JavaVirtualMachines/jdk-10.jdk/Contents/Home” 如果你去 gradle.properties,你可以插入这一行: “org.gradle.java.home=/Library/Java/JavaVirtualMachines/jdk1.8.0_301.jdk/Contents/Home” 到文件中。 重新启动 Android Studio,选择 Android 设备,它应该可以工作。 有趣的是,如果您转到 Finder,然后导航到文件夹,然后将文件夹拖到 textedit 或 vim 中的 gradle.properties 文件中,路径就会神奇地显示出来。我使用 Mac 已经 10 多年了,直到在 Android Studio 的新尝试中才发现这一点。 它对我有用。感谢 Stack Overflow 社区,它是任何应用程序开发人员工具包的重要组成部分。
【讨论】:
【参考方案13】:就我而言,我的实验室有 Windows 7 和 Visual Studio 以及 android Studio 和 Flutter 环境。 当我开始调试时,发生了同样的问题。
为了解决这个问题,
首先,在visual studio上使用扩展安装Java Extension Pack。
其次,遵循Java扩展包,它需要在配置运行屏幕上使用JDK 11。
三、下载安装JDK(java开发包)11
第四,安装时,必须检查安装过程中设置的路径。也许,它没有自动设置路径。你必须检查制作路径。
如果您设置和安装正确,它会自动出现在系统环境变量中作为 JAVA_HOME 名称。不是用户变量。
再次运行主飞镖。你可以正确看到模拟器
【讨论】:
【参考方案14】:第一
关注@Tom Aranda 解决方案
https://***.com/a/65132651/1367344
但没有删除 ./gradle
文件夹
秒
如果 gradle 失败:
./gradlew clean build --refresh-dependencies
强制 Gradle 更新依赖项
在这个问题中找到这条评论:https://***.com/a/48438866/1367344
【讨论】:
【参考方案15】:在 ubuntu 20.04 上,这对我有用:
sudo apt install default-jdk
【讨论】:
【参考方案16】:在更新到 Mac Big Sur 之前一切正常,我在本地机器上使用 Jenkins 和 Fastlane 'sh Fastlane beta' 进行 firebase 分发。这是一个颤振项目。
我刚刚在 gradle.properties 中添加了org.gradle.java.home=/Applications/Android Studio.app/Contents/jre/jdk/Contents/Home
。这解决了我的问题。
【讨论】:
以上是关于Kotlin 在 Java 安装中找不到所需的 JDK 工具的主要内容,如果未能解决你的问题,请参考以下文章
在 Apple 的开发人员文档中找不到所需的 NSURLConnection 委托方法。为啥?
CMake 在 Ubuntu 中找不到 GoogleTest 所需的库