IDEA,JDK是1.8,但Java版本只有21和17
发布时间:2025-05-20 14:38:37 发布人:远客网络
一、IDEA,JDK是1.8,但Java版本只有21和17
在2023年11月26日,当你尝试使用IDEA和JDK 1.8创建一个Spring Boot项目时,可能会遇到一些困扰。原本以为可以使用的Spring Initializr创建工具提供的Java版本选项却只有17和21这两个选项,而不是你所依赖的1.8版本。
当你选择17版本时,可能会遇到报错,而选择21版本则能够继续创建项目。这种现象的背后,是Spring Boot官网的一次更新。据官方公告,自2023年11月24日起,对Spring Boot 3.0及以下版本的支持已经结束,这意味着如果你的项目依赖的是这些旧版本,可能需要适应新的环境设置。
针对这个问题,有两个解决方案可供选择。首先,你可以选择使用21版本的Java创建项目,但之后需要在pom.xml文件中将Java版本降级为1.8,以确保项目兼容。这种方法虽然可能需要额外的配置,但可以保证项目的正常运行。
另一个方案是升级你的Java版本,直接使用Java 21或更高版本。这样可以避免因版本兼容问题带来的困扰,但需要注意的是,这可能会带来一些新的API和行为变化,需要在项目升级过程中仔细处理。
二、从Java 8 升级到 Java 17 全过程,贼特么坑!
在进行Java8到Java17的迁移过程中,一些关键问题和解决策略值得分享,以便避免踩坑。以下内容将分几个部分进行概述:
首先,Java11中引入的JEP 320提案移除了Java EE和CORBA的模块,如果项目中使用了这些模块,需要手动引入对应版本的javax包。例如,如果代码中使用了javax.annotation.*下的包,应替换为相应的javax包以避免编译错误。
对于使用了sun.misc.*下的包(如sun.misc.BASE64Encoder)的项目,可以简单地替换工具类以解决编译问题。对于netty低版本依赖sun.misc.*的项目,直接替换工具类即可解决编译错误。
对于使用了lombok的低版本项目,由于lombok在编译期使用了com.sun.tools.javac.*下的包,建议升级到最新版本以解决编译问题。尽管我本人不太喜欢lombok,但在调试时代码和class对不上确实很令人头疼。
Kotlin版本限制问题,由于在Java17之前,Kotlin在1.6.0版本才开始支持Java17的字节码,低于1.6.0的版本编译会直接报错。因此,确保Kotlin版本在1.6.0及以上是非常必要的。
针对废弃依赖的分析,可以通过jdeps工具进行依赖分析,以了解哪些库需要进行升级。
在Java领域,日志框架如slf4j和log4j等提供了统一的编程接口,方便实现个性化配置。然而,在Java17中,日志输出方式发生了变化,统一的日志框架Unified Logging实现日志格式的大一统。日志输出由传统的-Xloggc命令改为java-Xlog,不仅减少了特殊日志输出的特殊性,还增加了更多日志内容的可选择性和输出方式的灵活性。
Unified Logging允许通过设置selectors来指定输出哪些日志信息,通过设置output来指定日志输出的位置,以及使用decorators来提供日志上下文信息。这使得日志输出更加个性化和灵活。
在Java17中,GC相关参数已经整合到了-Xlog下,许多Java8中的参数已被移除或标记为过期。例如,PrintGCDetails已被-Xlog:gc*取代。此外,大量GC参数被移除,但大多数都可以在新的日志体系下找到相应的替代参数。
在调整GC算法时,CMS算法已正式退出历史舞台,G1算法成为主流选择。ZGC算法虽然在性能上有潜力,但由于内存占用过高导致的OS标记问题,使其在实际应用中受到限制。在选择GC算法时,G1通常是最佳选择。
在处理反射和私有API调用时,Java9模块化后,需要通过--add-exports和--add-opens来打破封装,不能直接访问sun.misc包等。这增加了代码的模块依赖性和安全性。
在进行Java8到Java17的迁移过程中,除了上述问题外,还应关注日志输出、GC参数调整和反射调用等关键点。确保对新版本的API和特性有深入理解,有助于顺利完成迁移并提高代码质量。
三、学习java一般要学多久
1、从零开始学习java一般需要多长时间
2、其实学java一般要多久?因人而异,例如一个零基础的小白自学java,每天学习8个小时来算,而且在有学习资料的基础上,每天学习,从零到找到工作,起码要半年起步,而且还要有项目经验,否则是不会有公司要你的。而一个有一些基础的人,在经过有人系统的教学后,是可以很快学会掌握java的,大概3个月左右。不过java相对于C,C++java而言,java无疑简单了很多,不需要指针,不需要销毁对象,使得对java初学者来讲更容易入门,挫折感也少。
3、很多人自学java,因为抓不到学习java的重点,找不到学习java的方向。往往花费大量的时间和精力,而效果却不大。面试IT企业office时或者参与真正的项目开发忽然发现自己一无所知。
4、我认为正确的学习路径应该是一个月java基础,两个月JavaSE,半个月html+css+div,一个月的数据库,servlet+jsp一个月,然后SSH框架两个月。然后通起来串一遍,把知识结合起来,再做几个项目练练手,就差不多了。(其实学习java基础部分需要时间不止一个月,至于说不止一个月,是需要你将java基础部分完全明白,能够串起来综合运用,甚至需要两遍三遍;之所以这么说,不是为了说java有多难,而是为了强调基础有多重要。)
5、我想要告诉你的是学习Java不难,但是也会很艰辛的敲代码。Java程序员经常需要加班,学之前要作好心理准备。其次一旦下定决心学java了,一定要坚持下去,不要半途而废。
6、java零基础的学生自学必然会耗费大量的时间和精力,而且如果你没有定制系统的学习方案,效果将事倍功半,上java培训班也是个不俗的自由选择,再加上自己的努力,一定可以学有所成,当然一定要慎重选择靠谱的机构。
7、最后学java依旧要看兴趣,如果你真的深入学习,你会发现"学java要多久?"是个毫无意义的问题,不要忘记,技术的道路更新实在太快。人只有在不断学习,才能走在技术的最前端。也许一辈子都要学呢。活到老,学到老,而且互联网技术更新迭代很快,只有不断学习才能更上时代不被淘汰。
8、总而言之,自学java是可以的,但效率会很低,对个人能力要求很高,时间也会很长,而且最重要的是可能找不到最新的学习资料(大多是收费),所以入坑需谨慎!