前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JDK8升级JDK11经验总结

JDK8升级JDK11经验总结

作者头像
全栈开发日记
发布2024-01-09 15:53:22
3310
发布2024-01-09 15:53:22
举报
文章被收录于专栏:全栈开发日记全栈开发日记

引言

随着Java语言的不断演进,我们迎来了JDK 11的时代。JDK 11作为Java平台的一个重要版本,不仅引入了许多令人振奋的新特性,还对性能、安全性和模块化系统进行了关键的改进。在这篇文章中,我们将深入探讨从JDK 8升级到JDK 11的过程,揭示升级的重要性以及带来的诸多益处。

从模块系统到HTTP客户端,再到局部变量类型推断,JDK 11为Java开发者带来了一系列令人期待的新特性。这些特性不仅使得代码更加简洁、易读,还提供了更好的性能和安全性。

在追求更高性能、更安全应用的时代,升级到JDK 11是一项不可忽视的任务。本文将深入探讨升级过程中的关键步骤、新特性的应用,以及升级所带来的重要益处,助力开发者更好地利用Java技术栈。

为何要升级jdk11

升级 JDK 8 到 JDK 11 具有许多好处,这些方面涵盖了新特性、性能优化、安全性增强以及生态系统的健康。

新特性和改进:JDK 11引入了许多新特性和改进,包括模块系统(Module System)、HTTP 客户端、局部变量类型推断(var 关键字)等。这些新特性可以帮助开发人员编写更现代、高效和可维护的代码。

性能优化:JDK 11 针对性能进行了多项优化,包括新的垃圾回收器、运行时性能改进等。这可以帮助提高应用程序的性能,减少资源消耗,使其更具竞争力。

模块化系统:引入的模块系统使得项目更容易维护和管理。它允许开发者将代码模块化,提高了代码的可重用性和可维护性,同时还可以更好地控制项目的依赖关系。

移除过时的 API:JDK 11 移除了一些在 JDK 8 中被标记为过时的 API,使得开发者能够使用更现代的替代方案,并且在代码中更容易维护。

生态系统的发展:随着时间的推移,更多的第三方库和框架将升级到支持 JDK 11,使得开发者能够充分利用新的功能和性能优势。

技术债务的管理:随着时间的推移,维护老旧的 JDK 版本可能会导致技术债务的积累。升级到新的 JDK 版本可以帮助企业和项目管理技术债务,确保系统的可维护性和持续演进。

升级前的准备

升级前应该检查项目的依赖关系,在项目中寻找到可能出现依赖版本老旧,依赖冲突,依赖不支持JDK11版本等问题。

在平台层面应该测试JDK11是否可运行,且JDK11的小版本要适合当前项目的规划 ,测试与生产服务器是否可以兼容JDK11部署问题,从而预知可能出现的问题。

升级过程

  • • 首先在环境上安装对应的JDK版本,通过测试类测试JDK11是否可运行
  • • 使用代码检查工具检测要升级的项目版本是否存在代码层面的错误(例如 :jdeps等)
  • • 检查项目依赖部分内容,在jdk11中抛弃了很多jdk8的内容(例如:javax依赖、@Resource注解等内容)
  • • 检查依赖部分是否有冲突

解决方案

在升级过程中,遇到的大部分问题主要为依赖问题,其中有依赖缺失、dubbo启动问题、打包问题、Spring启动问题等

本方案为jdk8升级到jdk11.0.2

以下是我遇到的问题以及解决方案

项目启动dubbo引用失败

jdl8升级jdk11 Dubbo所依赖的Spring所使用的javassist是一个老版本所以引入此依赖

代码语言:javascript
复制
<dependency>
    <groupId>org.javassist</groupId>
    <artifactId>javassist</artifactId>
    <version>3.18.2-GA</version>
</dependency>

不支持@Resource注解的问题

代码语言:javascript
复制
<dependency>
    <groupId>javax.annotation</groupId>
    <artifactId>javax.annotation-api</artifactId>
    <version>1.3.1</version>
</dependency>

JDK11打包报错需增加依赖(注中含有尖括号)

在java项目中打包时会引入maven-javadoc-plugin插件将java注解打包到一个jar包中,但是如果java的注解不够标准的话则会抛出异常,无法正常的打包。解决方案是添加如下配置。

代码语言:javascript
复制
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-javadoc-plugin</artifactId>
    <version>2.10.4</version>
    <executions>
        <execution>
            <id>attach-javadocs</id>
            <goals>
                <goal>jar</goal>
            </goals>
            <configuration>
                <additionalparam>-Xdoclint:none</additionalparam>
                <source>8</source>
                <encoding>UTF-8</encoding>
            </configuration>
        </execution>
    </executions>
</plugin>

不支持@WebEndpoint

代码语言:javascript
复制
<dependency>
    <groupId>com.sun.xml.ws</groupId>
    <artifactId>jaxws-rt</artifactId>
    <version>2.3.3</version>
</dependency>

启动时一直等待Dubbo

[Dubbo] Current Spring Boot Application is await...

代码语言:javascript
复制
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <version>2.6.1</version>
</dependency>

javax.jws.WebService不存在

代码语言:javascript
复制
<dependency>
    <groupId>javax.jws</groupId>
    <artifactId>javax.jws-api</artifactId>
    <version>1.1</version>
</dependency>

javax.xml.bind. annotation.不存在

代码语言:javascript
复制
<dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.3.1</version>
</dependency>

以上就是我在升级jdk11过程中遇到的问题以及解决方案!

测试和调试

  • • 测试包括以下建议

单元测试:运行项目中的所有单元测试,确保它们在JDK11下仍然通过。

集成测试和端到端测试:把项目完全构建起来进行测试,包括前端,缓存库,数据库,进行全面的测试。

执行性能测试:运行性能测试以确保在JDK11 下的性能表现是可接受的。

使用监控工具(如VisualVM、JConsole等)检查应用程序的内存和 CPU 使用情况。

  • • 通过这些测试确保jdk11升级后不会有太大的问题。

参考文献

https://mvnrepository.com/

喜欢文章就关注一下吧

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-01-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 全栈开发日记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 引言
  • 为何要升级jdk11
  • 升级前的准备
  • 升级过程
  • 解决方案
    • 以下是我遇到的问题以及解决方案
      • 项目启动dubbo引用失败
        • 不支持@Resource注解的问题
          • JDK11打包报错需增加依赖(注中含有尖括号)
            • 不支持@WebEndpoint
              • 启动时一直等待Dubbo
                • javax.jws.WebService不存在
                  • javax.xml.bind. annotation.不存在
                  • 测试和调试
                  • 参考文献
                  相关产品与服务
                  腾讯云服务器利旧
                  云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档