我读过一些文章,在JDK9中,.* API被删除了。通过删除,这是否意味着它们将从jdk 9中完全删除,或者它们被标记为已弃用?
根据上面的语句,如果项目是jdk 8编译的,它在jdk 17上运行会没有任何问题吗?这是我第一次尝试,由于模块化的变化,tomcat不能支持jdk 8,我遇到了一些问题。
我计划在JDK8中编译,然后在JDK17上运行,直到整个项目符合JDK17(通过JDK17兼容,我的意思是使用更新的API,而不是现有的jdk8过时的API)。
我的方向是正确的吗?或者我应该遵循一种不同的迁移方法?
发布于 2021-11-01 06:01:43
By removed是否意味着它们将从JDK9中完全删除,或者它们被标记为已弃用?
有些只是被标记为不推荐使用。其他的已经被完全删除了,尽管通常不是在Java 9中。大多数删除是在以后完成的,还有一些仍然会发生。如果您查看现在注释为@Deprecated的元素,在某些情况下,注释将正式指示该元素将被删除。
根据上面的语句,如果项目是JDK8编译的,它在JDK17上运行会没有任何问题吗
不一定。另一件已经发生的事情是,对“内部”Java的访问已经逐渐关闭。所以,如果你的应用程序使用这些API,在Java 9中你会得到警告,在Java 11中你会默认得到错误,而在Java 17中,一些访问(我认为)是不可能的。
所以..。可能会有“问题”。
正确的迁移方法是简单地这样做。测试,直到你解决了所有的问题。
显然,这意味着你需要一个测试服务器,你需要使用自动化测试框架进行单元测试,功能测试,UI测试等等。但这些只是好的软件工程实践。你应该已经在关注他们了。
我计划在JDK8中编译,然后在JDK17上运行,直到整个项目符合JDK17(通过JDK17兼容,我的意思是使用更新的API,而不是jdk8现有的过时API)。我的方向是正确的吗?或者我应该遵循一种不同的迁移方法?
不是的。正如@Holger指出的那样,你很容易遇到很多运行时错误……由于Java 17编译器可能会发现的问题。
只有一种方法。真的。在Java 17上编译,直到您确定了所有编译时依赖问题;即,使用已被删除或关闭的API。然后在Java 17上运行,一次又一次地测试,直到发现所有其他问题。
在开始之前,最好检查项目的所有依赖项(库等),看看它们是否是Java17上支持的。然后将它们更新到正确的(可能是最新的)版本。
Java 17只发布了几个星期,所以您的一些依赖项很可能还没有跟上。如果是这样的话,在这个阶段以Java11LTS为目标可能是一个更好的想法。
https://stackoverflow.com/questions/69792839
复制相似问题