概述
新版本JDK我眼馋了很久了,一直到今天终于升级成功了,这里记载一下出现的问题以及我解决他们的办法。
另外我发现升级之后,Spring的ClassPathResources
都失效了,JarLauncher
也不能正常启动打包好的jar,我废了很长时间也没有成功打包完成,有人知道该怎么办吗?
过程
Maven的准备
首先,需要准备好需要的各种jar包,比如一些古董级别的,那就得下载然后重新编译一下,加上module-info什么的,这些就不说了。
然后,首先更换Springboot的Parent。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
这个是比较新的版本,更换之后支持模块化的java。完成之后添加各个JavaFX依赖,因为java8以后javafx是一个独立的工程了。
在此之后,检查maven里面各个依赖有没有能更新的,能更新就都更新了,因为新版本是模块化的,更新之后这些jar包中一些就支持模块化了,如果是标准的模块化,那么是可以通过jlink直接生成jre的,当然似乎在springboot里面这个倒是无所谓,反正他们都会被直接打进jar包里面。
这个时候就得说下javafx-spring-boot-support这个工程了,作者似乎不见了,我手动魔改了一个适合java13的版本,地址在文末,当然有bug是在所难免的了,也没有maven,需要手动下载然后编译。
如果工程里面有Lombok,特别要注意一下,如果他不是spring创建的时候引入的,那么就需要更新他的版本,用最新的就行。
接着更改Maven的编译版本
<properties>
<java.version>13</java.version>
</properties>
做完这些,就可以开始更改idea的工程配置了。
IDEA的配置
更改project的ProjectSDK,languageLevel
更改这两个Tab的language Level。
检查Run Configuration,如果这里选择了JRE,那么需要更换这里的JRE。
检查Setting的JavaCompiler选项,如果是其他的,需要更换为13.
ok,到此为止,idea已经设置好了。
运行的Bug以及处理
现在,创建module-info.java,直接创建在最外层包里面,然后运行springboot。
那么,一大堆bug已经准备就绪。
问题1:lombok 需要Mapstruct.spi.ap
处理方法:添加mapstruct的AnnotationProcessor即可。
问题2:plexus-container-default-1.6.jar没有模块描述符
processorPath复制出来,去掉那个plexus-container-default-1.6.jar的路径,然后黏贴回去即可。
问题3:程序包xxx存在于xxx里面,但是模块xxx并没有读取它
处理方法:
module-info添加对这个模块require即可。你可以检查源码里面红色的地方,根据idea的提示添加require。
问题4:xxx没有open到xxx
module test13 does not open com.example.demo to module spring.core
就像这种。添加opens语句,对需要的模块开放自己的包即可。
问题5:Unable to resolve persistence unit root URL
module-info增加 requires net.bytebuddy;
问题6:java.lang.NoSuchFieldError: TRACE
属于依赖包的冲突,去掉多余的包,保留一个就行,可以通过
然后Ctrl + F,输入冲突包,右键,Exclude掉。
问题7:ClassNotFound,NoClassDefinied
处理方法:添加相关依赖,不行的话就在module-info里require他。