java21是当前(2024-11-11)最新的一个LTS版本。我目前使用的java是17,所以升级一下,故有此记录。
目标
要保证项目在不修改java代码的情况下可以正常编译
、打包
、部署
、运行
。
步骤
父pom工程
注意要新开分支
来修改。
修改:
- 提升父pom的版本
<java.version>17</java.version>
中的17为21- 此处被maven-compiler-plugin插件的配置configuration的source/target引用
- 修改
.drone.yml
- .drone.yml是ci/cd工具,用于执行maven命令,将工程安装到maven本地仓库。
- 修改镜像
maven:3.6.3-openjdk-17-slim
为openjdk:21-jdk
。因为不存在maven和openjdk的镜像。尝试了maven:3.9.9-eclipse-temurin-21-alpine
和maven:3.9.9-eclipse-temurin-21
发现找不到JAVA_HOME,尽管env中明明有JAVA_HOME,最终选择openjdk
和maven wrapper
的组合方式。
使用maven wrapper
找到文件mvnw
和mvnw.cmd
(可以去start.spring.io创建工程并下载到本地,里面就有这两个文件)并复制到工程根目录。
在工程根目录创建两层目录.mvn/wrapper
,再在wrapper目录中创建一个文件,名叫“maven-wrapper.properties”,它的内容如下:
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.zip
wrapperUrl=https://mirrors.huaweicloud.com/repository/maven/org/apache/maven/wrapper/maven-wrapper/3.1.1/maven-wrapper-3.1.1.jar
说明:
- distributionUrl指定maven的安装包的url。
- wrapperUrl指定maven wrapper的url。
- 如上配置只是我个人使用的,各位可以修改成自己的。
通用工程
- 修改使用的父pom的版本。
- 修改.drone.yml(见“父pom工程 - 修改
.drone.yml
”)
web工程
- 修改使用的父pom的版本。
- 修改.drone.yml(见“父pom工程 - 修改
.drone.yml
”)
总结
升级很成功,达成了目标。
主要有两个问题:
- hub.docker.com中没有官方的集成maven和openjdk21的镜像。(自己可以按需要创建一个,但我是尽量使用官方镜像。)所以使用openjdk和maven wrapper。
- docker image for maven and openjdk:jdk21 is unavailable in hub.docker.com, so use openjdk:21-jdk and maven wrapper to compile code
- 打包镜像使用了
openjdk:21-jdk
后,脚本中执行ls /drone/src
时会报错,暂时先注释掉了。