Error:(14, 20) java: 程序包sun.net.util不存在

本文解决IDEA启动项目时出现的Error:(14,20)java:程序包sun.net.util不存在的问题,该问题是由于jdk版本不匹配引起。通过调整IDEA中jdk版本设置,取消不必要的选项并选择正确的jdk版本,可以有效解决此错误。

IDEA启动项目报错Error:(14, 20) java: 程序包sun.net.util不存在
jdk版本导致的问题
解决方法:
在这里插入图片描述
根据1的版本号,将2部分的勾取消掉,在3部分自选对应的版本号,改完效果如下:
在这里插入图片描述
最后点击apply保存设置,重新启动项目

<think>我们正在解决"程序包sun.security.util存在"的问题。根据提供的引用,这个问题通常与JDK版本或编译器设置有关。以下是解决方案的步骤:1.**检查JDK版本**:确保项目使用的JDK版本是支持`sun.security.util`的。在OracleJDK中,`sun.*`包是内部API,同版本可能有变动。如果使用的是较新的JDK(如JDK9及以上),这些包可能被移除或需要额外参数访问。2.**在IDE中设置JDK版本**(以IntelliJIDEA为例):-打开项目后,进入`File`->`ProjectStructure`(或按`Ctrl+Alt+Shift+S`)。-在`ProjectSettings`->`Project`中,检查`ProjectSDK`是否选择了正确的JDK版本(例如,如果项目需要`sun.security.util`,则可能需要JDK8或更低版本)。-在`ProjectSettings`->`Modules`中,选择对应的模块,将`Languagelevel`设置为与JDK版本匹配(如JDK8对应`8-Lambdas,typeannotationsetc.`)。-如果项目使用Maven,需要在Maven中指定JDK版本,避免刷新后版本被重置。3.**在Maven中指定JDK版本**(如果使用Maven):在项目的`pom.xml`文件中,配置Maven编译器插件:```xml<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>1.8</source><!--根据实际需要设置,比如1.8--><target>1.8</target><!--如果需要访问内部API,可能需要添加编译器参数--><compilerArgs><arg>--add-exports=java.base/sun.security.util=ALL-UNNAMED</arg></compilerArgs></configuration></plugin></plugins></build>```注意:如果使用JDK9及以上,可能需要`--add-exports`参数来允许访问`sun.security.util`包。4.**处理编译器错误/警告**:如果IDE仍然报错,可能需要调整编译器的错误级别(如引用[2]中所述,但针对IntelliJIDEA):-在IntelliJIDEA中,进入`File`->`Settings`->`Build,Execution,Deployment`->`Compiler`->`JavaCompiler`。-在对应模块的编译选项中,可以尝试调整与“废弃API”或“禁止引用”相关的设置(但注意,通常建议将错误改为警告,这可能会隐藏问题)。5.**替代方案(推荐)**:由于`sun.*`包是内部API,推荐使用。建议寻找官方替代方案。例如,`sun.security.util`中的一些功能在标准库中可能有替代:-比如使用`java.security`或`javax.crypto`包中的类。-如果必须使用,考虑将项目迁移到支持的JDK版本(如长期支持的JDK8)。**总结步骤**:-设置项目JDK为包含该包的版本(如JDK8)。-在Maven中指定源和目标版本,并可能添加`--add-exports`参数。-尽量避免使用`sun.*`内部包,寻找官方替代方案。如果上述步骤无法解决,请检查具体的JDK版本中是否确实包含该包(例如,在JDK安装目录下的`src.zip`中查找`sun.security.util`包是否存在)。§§相关问题§§1.如何查看当前项目使用的JDK版本?2.如何在Maven中指定JDK编译版本?3.JDK9及以上版本中如何访问内部API(如sun.*包)?4.是否有`sun.security.util`的替代方案?</think> ### 程序包 `sun.security.util` 存在的解决方案 `sun.security.util` 属于 JDK 内部 API(`sun.*` 包),从 JDK 9 开始被官方限制访问。以下是分步解决方案: #### ✅ 方法 1:临时方案(IDE 设置) 1. **打开项目设置** IntelliJ IDEA:`File` → `Project Structure` → `Project Settings` → `Modules` ```mermaid graph LR A[Project Structure] --> B[Project Settings] B --> C[Modules] C --> D[选择对应模块] D --> E[设置 Language level 为 JDK 11+] ``` 2. **调整编译器警告级别**(需与引用[2]类似的原理) Eclipse:`Properties` → `Java Compiler` → `Errors/Warnings` → **将 `Forbidden reference` 从 ERROR 改为 WARNING** #### ✅ 方法 2:永久方案(Maven 配置) 在 `pom.xml` 中添加编译器配置: ```xml <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.10.1</version> <configuration> <release>11</release> <!-- 与项目JDK一致 --> <compilerArgs> <!-- 开放内部API访问权限 --> <arg>--add-exports=java.base/sun.security.util=ALL-UNNAMED</arg> </compilerArgs> </configuration> </plugin> </plugins> </build> ``` #### ✅ 方法 3:终极方案(代码改造) **强烈建议** 替换 `sun.security.util` 为标准 API: ```diff - import sun.security.util.ObjectIdentifier; + import org.bouncycastle.asn1.ASN1ObjectIdentifier; // 使用BouncyCastle库 // 原代码: - ObjectIdentifier oid = ...; + ASN1ObjectIdentifier oid = ...; ``` > ⚠️ 警告:`sun.*` 包是 Oracle JDK 私有实现,使用后: > ✘ 丧失跨 JDK 供应商兼容性 > ✘ 在 JDK 17+ 可能完全可用 > ✘ 违反 Java 模块化规范[^1]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值