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-slimopenjdk:21-jdk。因为不存在maven和openjdk的镜像。尝试了maven:3.9.9-eclipse-temurin-21-alpinemaven:3.9.9-eclipse-temurin-21发现找不到JAVA_HOME,尽管env中明明有JAVA_HOME,最终选择openjdkmaven wrapper的组合方式。

使用maven wrapper

找到文件mvnwmvnw.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时会报错,暂时先注释掉了。