我是靠谱客的博主 寒冷花卷,最近开发中收集的这篇文章主要介绍Error:(6, 32) java: package com.sun.jndi.toolkit.dir does not exist项目场景 - 这是复(废)现(话)解决方案 - 跳过复(废)现(话),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

目录

  • 项目场景 - 这是复(废)现(话)
  • 解决方案 - 跳过复(废)现(话)

项目环境:MavenJDK 11 (其他版本的 JDK 也类似), MacOS (WindowsIDEA 配置界面可能会不同)

项目场景 - 这是复(废)现(话)

IDEA 导入一个已经存在的项目(替换为 demo 项目),被告知项目用的是 JDK 11。导入成功后,点击 File -> Project Structure,并将下面修改为 JDK 11

在这里插入图片描述

搞定,,,运行代码(如此简单,脸上开始浮现笑容,内心美滋滋)。
在这里插入图片描述

然后就:

在这里插入图片描述

在这里插入图片描述

Information:java: Errors occurred while compiling module 'demo'
Information:javac 11.0.9 was used to compile java sources
Information:6/1/22, 10:59 AM - Build completed with 1 error and 0 warnings in 2 s 391 ms
# com.sun.jndi.toolkit.dir 这个包不存在
Error:(3, 32) java: package com.sun.jndi.toolkit.dir does not exist

脸上的笑容逐渐消失,内心开始骂骂咧咧。

在这里插入图片描述

点击报错,跳转后一看,代码里面用到了 import com.sun.jndi.toolkit.dir.SearchFilter 这个类:

package com.example.demo;

import com.sun.jndi.toolkit.dir.SearchFilter;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

}

可是 com.sun.jndi.toolkit.dir 这个包在 JDK 11 中是存在的呀,为什么会找不到呢??

在这里插入图片描述

看到这直觉告诉我,肯定又是使用 JDK 的问题。。。因为之前已经写过一篇关于 JDK com.sun 包的文章,文章地址: Error:(16, 42) java: package com.sun.org.apache.regexp.internal does not exist 。

打开之前文章仔细对比后,发现这两者还是有区别的,之前写的 JDK 中确实已经移除相应的代码了,报错是正常的,(如果是这种情况,请看上面的文章);但是这次 JDK 中明明存在,但是最终也报错了,确实有些无从下手。但是正在大把大把抓头发时,再次仔细的看报错信息,忽然发现了一个切入点:Errors occurred while compiling module 'demo'

# 报错信息
Information:java: Errors occurred while compiling module 'demo'
Information:javac 11.0.9 was used to compile java sources
Information:6/1/22, 10:59 AM - Build completed with 1 error and 0 warnings in 2 s 391 ms
# com.sun.jndi.toolkit.dir 这个包不存在
Error:(3, 32) java: package com.sun.jndi.toolkit.dir does not exist

当编译这个 demo 模块是发生错误,看样子是在编译期间。然后去 IDEA 配置文件中去查看:

在这里插入图片描述
???这里的 Target bytecode version 怎么是 1.8 。。。然后去 pom.xml 看了一下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    ....
    <name>demo</name>
    
    <properties>
        <java.version>1.8</java.version>
    </properties>
	....
	<!-- 有的分模块项目中可能存在下面的配置 -->
	<build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                	<!-- 这里推荐使用 ${java.version},而不是硬编码 -->
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

Maven 这里使用的是 JDK 1.8<java.version>1.8</java.version> ,项目明明都要用 JDK 11 了,Maven 这里竟然没有改。。。 由此猜测:要么项目是 JDK 1.8 升级到 JDK 11,要么 pom.xml 配置文件是从之前 JDK 1.8 项目中复制过来的。

解决方案 - 跳过复(废)现(话)

通过上面的排查,大概率已经确认了问题所在。有的人也有可能觉着直接下面中选择 11 就可以,但是并不推荐,毕竟只对你本地的 IDEA 有效( For current proejct )。

在这里插入图片描述
在这里插入图片描述

看这里》》》》:所以最正确的方式,还是修改 pom.xml 文件,让其编译方式与项目所使用的的 JDK 对应起来,IDEA 中的 Target bytecode version 会自动匹配成 Maven 中的配置。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    ....
    <name>demo</name>
    
    <properties>
        <java.version>11</java.version>
    </properties>
	....
	<!-- 有的分模块项目中可能存在下面的配置 -->
	<build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                	<!-- 这里推荐使用 ${java.version},而不是硬编码 -->
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

折腾完成,又可以开心的撸代码了!!!

个人博客:Roc’s Blog

最后

以上就是寒冷花卷为你收集整理的Error:(6, 32) java: package com.sun.jndi.toolkit.dir does not exist项目场景 - 这是复(废)现(话)解决方案 - 跳过复(废)现(话)的全部内容,希望文章能够帮你解决Error:(6, 32) java: package com.sun.jndi.toolkit.dir does not exist项目场景 - 这是复(废)现(话)解决方案 - 跳过复(废)现(话)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(65)

评论列表共有 0 条评论

立即
投稿
返回
顶部