一、前言
有时候新建项目会出现jdk无法展开的情况。情况如下图:
现在项目基本上都是有kotlin环境的,所以使用Java写其实也没事儿。因为使用的java包其实都是调用的是kotlin包下面的,比如String
。kotlin
的包是kotlin.String
,jdk
的包是java.lang.String
。所以不是非要调用jdk下面的包的话是没有问题的。但是假如自己新建一个lib
。写java
代码,或者某些插件生成java
代码时候,凡是调用jdk
库的代码就都会报错。如下
二、解决方式
首先这个问题跟jdk版本没有关系,跟windows、mac也都没有关系,跟哪一种jdk使用也没有关系(比如使用openjdk就会解决该问题)。主要问题是开发工具的问题,可能是某个bug。
主要修改.idea
->misc.xml
中的代码。位置如下:
这里看下有问题的代码内容是什么
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="DesignSurface">
<option name="filePathToZoomLevelMap">
<map>
<entry key="app/src/main/res/layout/activity_main.xml" value="0.335" />
</map>
</option>
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_11" default="true" project-jdk-name="Android Studio default JDK" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/build/classes" />
</component>
<component name="ProjectType">
<option name="id" value="Android" />
</component>
</project>
不同项目的这个文件会有不同。不过无需过多关注,这里注意name
为ProjectRootManager
的<component>
标签中的project-jdk-name
属性。可以看到如下代码:
project-jdk-name="Android Studio default JDK"
看到这个名字正是我们看到的不能展开的jdk的名字。这里只需要将该字段修改为正确的版本名字即可。比如1.8
、11
、15
即可。但是注意版本名字只需要标注大版本即可,不需要写上小版本,例如11.0.10
。改完代码后关掉项目,重新打开即可。修改完的代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="DesignSurface">
<option name="filePathToZoomLevelMap">
<map>
<entry key="app/src/main/res/layout/activity_main.xml" value="0.335" />
</map>
</option>
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_11" default="true" project-jdk-name="11" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/build/classes" />
</component>
<component name="ProjectType">
<option name="id" value="Android" />
</component>
</project>
重新运行程序的效果如下:
另外需要注意下有时候程序会出现一个提示,说是选择的jdk版本不符合。让重新选择。问题如下:
11:54 上午 Project HelloWorld is using the following JDK location when running Gradle:
/Users/rockey211119/Library/Java/JavaVirtualMachines/liberica-1.8.0_312
Using different JDK locations on different processes might cause Gradle to
spawn multiple daemons, for example, by executing Gradle tasks from a terminal
while using Android Studio.
More info...
Select a JDK
Do not show this warning again
这时候检查刚才的标签里面是否有default="true"
属性,没有的话添加上即可。这种问题是没有办法通过修改重新设置版本号来解决的,例如以下的方式:
综合所述,猜测找不到jdk的问题应该是idea没有正确的将jdk匹配上的问题。当你检查过环境变量,版本等各种方式均无法解决该问题的时候,不妨尝试下本文提供的解决方式。
这个问题可以参考下面的帖子:
Using different JDK locations on different processes might cause Gradle to spawn multiple daemon
如果不能解决,那么检查下面的代码是不是设置的版本和安装的版本不符合,设置的版本系统没有安装:
compileOptions {
sourceCompatibility JavaVersion.VERSION_11
targetCompatibility JavaVersion.VERSION_11
}
kotlinOptions {
jvmTarget = '11'
}