java 8 update 11_从Java 8升级到Java 11应该注意的问题

从 Java 8迁移到Java 11比大多数升级更棘手。以下是这个过程的一些注意事项。

模块

在Java 9中Java引入了历史上最大的变化之一 是模块,但:

不必将你自己的代码模块化以后才能升级到Java 11。

在大多数情况下,放在类路径classpath上的代码能继续在Java 9及更高版本上有效被发现和运行,但是如果将模块放置类路径上会被忽略,这对于库包发布者来说非常糟糕,但对于应用程序开发者是个好事情。

因此,在升级到Java 11时尽可能地先不用模块化,而将自己的应用程序转换为Java模块应该等待时机,等待大规模开源的依赖库包真正采用模块化后的几年内才开始实施模块化,现在,尝试模块化很痛苦,因为你的依赖包很少是模块化的。

(如果将程序模块化的主要原因是由于使用jlink能缩小JDK的大小,也完全不需要模块化来实现这个目标 - 只需使用Maven创建一个 jar- with-dependencies

,其中module-info不配置require,不配置export( no-requires和no-exports )。

删除了JDK的部分内容

JDK的有关Java EE和Corba的一部分被删除,它们不再适合JDK,或者可以在其他地方维护。

如果您使用Corba,那么几乎没有人可以帮助你,但是,如果你使用Java EE模块,那么在大多数情况下,对已删除代码的修复应该很简单。只需添加适当的Maven即可。

在Java客户端方面,已经删除了Java WebStart ,替代方案会更加棘手,请考虑使用Getdown或Update4J。

不安全和朋友

多年来, Sun和 Oracle 一直在告诉开发人员不要使用sun.misc.Unsafe和其他尖端的JDK API。很长一段时间,Java 9将要删除这些,但这实际上从未发生过。

但是在Java 11,首次访问受限API时,你可能会收到警告,此警告仅打印一次。这是一个有用的提醒,你的代码或依赖正在做一些“顽皮”的事情,需要在某个时候修复。

您还会发现Java 11有许多专门设计的新API,以避免使用Unsafe人需要,如果你使用的是“非法”API,请优先调查这些新API,例如, Base64, MethodHandles.privateLookupIn, MethodHandles.Lookup.defineClass, StackWalker 和Variable Handles。

工具和图书馆

模块化和新的六个月发布周期这两个机制共同对 工具 和库开发人员使用产生了真正的影响,一些项目已经能够跟上,有些人在努力,有些人失败了。

升级到Java 11时,关键任务是将所有依赖项更新为最新版本,如果自Java 9问世以来这些依赖项还没有发布新版本,那么这些依赖可能需要额外的关注或测试,确保您也更新了IDE。

但是,不仅需要更新应用程序的依赖项,Maven也是如此,大多数Maven插件已将主要版本更改为v3.x,将Maven本身升级到v3.5.4也是有益的。

可悲的是,核心maven团队规模很小,因此仍有一些问题需要解决,但是,如果你的Maven构建非常合理且简单,那么通常应该没问题。但请注意,将插件从v2.x升级到v3.x可能需要更改配置,而不仅仅是与模块相关联。例如,Maven Javadoc插件已重命名该argLine属性。

需要注意的一个关键点是Maven使用模块进行操作的方式,当Maven编译器或surefire插件找到一个模块化的jar文件(即带有module-info.class)时,它可以将该jar放在模块路径而不是类路径上,因此,即使你可能打算只在类路径上运行你的应用程序,Maven可能部分地在类路径上编译和测试代码,而另外一部分会在模块路径上编译代码,在目前,没有什么可以搞定这个问题。

有时你的构建需要更大的更改。例如,需要将Findbugs更改为SpotBugs,并将Cobertura改为JaCoCo。

这些构建更改可能需要一些时间 。

总结

当我完成迁移之后,我的结论是痛苦主要在于维护与Java 8的兼容性,将应用程序全部只到Java 11应该更简单,因为不需要与Java 8保持联系。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/351570.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

标签树的三种遍历

一、标签树的下行遍历 属性说明.contents子节点的列表&#xff0c;将<tag>所有儿子节点存入列表中&#xff08;只能获取下一级儿子节点&#xff09;.children子节点的迭代类型&#xff0c;与.contents类似&#xff0c;用于循环遍历儿子节点.descendants子孙节点的迭代类型…

Git 使用规范流程

团队开发中&#xff0c;遵循一个合理、清晰的Git使用流程&#xff0c;是非常重要的。 否则&#xff0c;每个人都提交一堆杂乱无章的commit&#xff0c;项目很快就会变得难以协调和维护。 下面是ThoughtBot 的Git使用规范流程。我从中学到了很多&#xff0c;推荐你也这样使用Git…

oracle安装静默

安装环境&#xff1a;centos71、修改主机名 /etc/sysconfig/network#HOSTNAMEoracledb.012、修改ip和对应的主机名 /etc/hosts#10.5.1.190 oracledb.013、关闭Selinux /etc/selinux/config#SELINUXdisabled4、参考官方文档安装依赖的软件包 binutils-2.23.52.0.1-12.el7.x86_64…

[MEGA DEAL] Ultimate Java开发和认证指南(59%折扣)

通过介绍世界上最受欢迎的编程语言之一掌握Java编程概念 嘿&#xff0c;怪胎&#xff0c; 本周&#xff0c;在我们的JCG Deals商店中 &#xff0c;我们提供了一个极端的报价 。 我们提供的《 Ultimate Java Development and Certification Guide 》 仅售20美元&#xff0c;而…

python浅拷贝的说法_Python中List的复制(直接复制、浅拷贝、深拷贝)

直接赋值&#xff1a;如果用 直接赋值&#xff0c;是非拷贝方法。这两个列表是等价的&#xff0c;修改其中任何一个列表都会影响到另一个列表。old [1,[1,2,3],3]new []for i in range(len(old)):new.append(old[i])new[0] 3new[1][0] 3-----------------------Before:[1,…

AliOS-Things Visual studio code helloworld 入门

配置环境的时候别忘了下载&#xff1a;GCC工具链&#xff1a;https://developer.arm.com/open-source/gnu-toolchain/gnu-rm/downloads AliOS Things 完成第一个应用&#xff1a;Hello World 全局掌控 从Git上下载源码用VSCode打开源码&#xff0c;查看源码的目录结构打开Hello…

java 联网_java网络

这个图很形象的展示了OSI的五层架构之间的关系。OSI被称为开放式互联&#xff0c;是国际标准组织制定的网络模型&#xff0c;本来是七层&#xff0c;后来把表现层和会话层加到应用层里面了。那么五层模型中的每一层具体都是干什么的呢&#xff1f;在标准的网络模型中&#xff0…

[小米OJ] 4. 最长连续数列

思路&#xff1a; 时间限制为O(n)&#xff0c;即不能使用先排序后寻找的方法。 这里利用哈希表查询插入复杂度都为O(1)的特性来解&#xff0c;利用一个哈希表来保存每一个数字以及其所在数列的长度。 遍历每一个数字n&#xff1a;查询表中是否存在n-1和n1&#xff0c;若存在&am…

控制反转

控制反转[编辑] 维基百科&#xff0c;自由的百科全书控制反转&#xff08;Inversion of Control&#xff0c;缩写为IoC&#xff09;&#xff0c;是面向对象编程中的一种设计原则&#xff0c;可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入&#xff08;Depe…

使用Mutability Detector对Java数据类的不变性进行单元测试

在我们所有的项目中&#xff0c;我们使用的数据类根据定义包含数据&#xff08;字段&#xff09;&#xff0c;但不包含&#xff08;业务&#xff09;逻辑。 根据最佳编码实践&#xff0c;数据类最好应该是不可变的&#xff0c;因为不可变性意味着线程安全。 这里的主要参考是J…

三种单例模式的C++实现

简介 因为在设计或开发中&#xff0c;肯定会有这么一种情况&#xff0c;一个类只能有一个对象被创建&#xff0c;如果有多个对象的话&#xff0c;可能会导致状态的混乱和不一致。这种情况下&#xff0c;单例模式是最恰当的解决办法。它有很多种实现方式&#xff0c;各自的特性不…

centos安装Redis

vRedis的安装 ♛ 1.0 下载Rediswget http://download.redis.io/releases/redis-5.0.2.tar.gz ♛ 1.1 解压tar -zxvf redis-5.0.2.tar.gz ♛ 1.2 安装gcc依赖Redis是C实现的&#xff0c;需要gcc来进行编译&#xff0c;先安装gcc。 yum install gcc ♛ 1.3 打开Redis目录cd redis…

maven插件编写_编写Maven插件的提示

maven插件编写最近&#xff0c;我花了很多时间为Maven编写插件或在其中工作。 它们简单&#xff0c;有趣且有趣。 我以为我会分享一些技巧&#xff0c;使编写它们时的生活更轻松。 提示1&#xff1a;将任务与Mojo分开 最初&#xff0c;您将把mojo的所有代码放入mojo的类&…

e3是合法浮点数吗_下列哪些是不合法的浮点数的选项是 123 2e4.2 .e5 -e3 .234 1e3

共回答了16个问题采纳率&#xff1a;93.8%浮点数是属于有理数中某特定子集的数的数字表示,在计算机中用以近似表示任意某个实数.具体的说,这个实数由一个整数或定点数(即尾数)乘以某个基数(计算机中通常是2)的整数次幂得到,这种表示方法类似于基数为10的科学记数法.由此可以看出…

VC的Win32控制台程序中使用MFC库文件

如果想要在VC中的Win32控制台程序中使用CString类&#xff0c;应注意下列情况&#xff1a; 1.必须包含头文件#include <afx.h> 2.Project ----settings... ----General---- Microsoft Foundation Classes: Use MFC in a Shared DLL

java能否调用com_java调用com

一、C#写com组件开发环境 vs20051、新建工程:ClassLibrary1 //根据自己需要取工程名2、右键点击工程->应用程序->程序集信息->使程序集com可见&#xff0c;打上勾右键点击工程->生成->为com Interop注册 打上勾3、设置强签名打开Visual Studio Command Pr…

JUnit规则–引发异常时执行附加验证

在本文中&#xff0c;我将快速向您展示如果您需要解决以下挑战&#xff0c;那么JUnit规则有多方便 方法捕获异常并必须执行一些额外的任务&#xff0c;然后再抛出或引发包装异常。 调用额外任务和引发的异常应通过单元测试进行验证。 这意味着您有一些这样的代码 public cla…

十分钟搞清字符集和字符编码

什么是字符集 什么是字符编码 UTF-8和Unicode的关系 UTF-8编码简介 为什么会出现乱码 如何识别乱码的本来想要表达的文字 常见问题处理之Emoji 本文将简述字符集&#xff0c;字符编码的概念。以及在遭遇乱码时的一些常用诊断技巧 背景&#xff1a;字符集和编码无疑是IT菜鸟甚至…

前端Ajax/JS/HTML+后端SpringMVC(二)

1. jQuery AJAX 1.1. jQuery框架中的ajax()函数 在应用了jQuery框架后&#xff0c;调用ajax()函数即可发出AJAX请求&#xff0c;并获取响应结果&#xff0c;该函数的参数必须是JSON对象&#xff0c;通常&#xff0c;在JSON对象中封装的属性有&#xff1a; url&#xff1a;处理请…

java lambda函数_番石榴函数和Java 8 Lambdas

java lambda函数我最近阅读了Brian Goetz的《 Lambda的状况》 &#xff0c;在阅读了该文章之后&#xff0c;我想尝试使用Java 8 Lambda表达式。 Brian在他的文章中继续描述了将一种方法称为“功能”接口的接口。 功能接口几乎总是用作匿名类&#xff0c;其中ActionListener是规…