在Java11时代实现的Spring Boot应用程序是否能够在Java17上工作?
这是什么?
我要放弃Java11了,喬○喬!
因为这一段很长,所以我先写下结论。
有些库可能无法正常工作。
基本要素
Java – Java is a programming language that is widely used in software development.
-
- https://jdk.java.net/17/
-
- JDK 17 Release-Candidate Builds (2021-08-06)
- arch: macOS/x64
个人电脑
-
- Darwin bb.local 20.6.0 Darwin Kernel Version 20.6.0: Wed Jun 23 00:26:31 PDT 2021; root:xnu-7195.141.2~5/RELEASE_X86_64 x86_64
- MacOS Big Sur version 11.5.2
春季引导(轻巧版本)
-
- Spring Boot 2.5.0
-
- 実装されたJavaのclass及びinterface 40個くらい
- Dependencies
[INFO] +- org.springframework.boot:spring-boot-starter-actuator:jar:2.5.0:compile
[INFO] +- org.springframework.boot:spring-boot-starter-web:jar:2.5.0:compile
[INFO] +- org.springframework.boot:spring-boot-starter-web-services:jar:2.5.0:compile
[INFO] +- org.springframework.boot:spring-boot-starter-security:jar:2.5.0:compile
[INFO] +- org.mybatis.spring.boot:mybatis-spring-boot-starter:jar:2.1.3:compile
[INFO] +- mysql:mysql-connector-java:jar:8.0.25:runtime
[INFO] +- org.springframework.boot:spring-boot-configuration-processor:jar:2.5.0:compile (optional)
[INFO] +- org.projectlombok:lombok:jar:1.18.20:compile (optional)
[INFO] +- org.springframework.boot:spring-boot-starter-tomcat:jar:2.5.0:provided
[INFO] +- org.springframework.data:spring-data-commons:jar:2.5.1:compile
[INFO] +- org.springframework.boot:spring-boot-starter-test:jar:2.5.0:test
[INFO] +- io.springfox:springfox-swagger-ui:jar:2.8.0:compile
[INFO] +- io.springfox:springfox-core:jar:2.8.0:compile
[INFO] +- io.swagger:swagger-annotations:jar:1.5.21:compile
[INFO] +- org.springdoc:springdoc-openapi-ui:jar:1.5.4:compile
[INFO] +- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:2.12.3:compile
[INFO] +- org.openapitools:jackson-databind-nullable:jar:0.2.1:compile
[INFO] +- ch.qos.logback:logback-core:jar:1.2.3:compile
[INFO] +- ch.qos.logback:logback-access:jar:1.2.3:compile
[INFO] +- net.rakugakibox.spring.boot:logback-access-spring-boot-starter:jar:2.7.1:compile
[INFO] +- com.amazonaws:aws-java-sdk:jar:1.11.980:compile
[INFO] +- com.amazonaws:aws-java-sdk-logs:jar:1.11.980:compile
[INFO] +- com.amazonaws:aws-java-sdk-ec2:jar:1.11.980:compile
[INFO] +- com.j256.cloudwatchlogbackappender:cloudwatchlogbackappender:jar:2.1:compile
[INFO] +- com.googlecode.json-simple:json-simple:jar:1.1.1:compile
[INFO] +- org.flywaydb:flyway-core:jar:7.7.3:compile
[INFO] \- io.github.yoshikawaa.modelmapper.spring.boot:modelmapper-spring-boot-starter:pom:0.1.0:compile
[INFO] \- io.github.yoshikawaa.modelmapper.spring.boot:modelmapper-spring-boot-autoconfigure:jar:0.1.0:compile
[INFO] \- org.modelmapper.extensions:modelmapper-spring:jar:2.3.5:compile
[INFO] \- org.modelmapper:modelmapper:jar:2.3.5:compile
操作步骤
- 从openjdk网站上获取目标的tar.gz文件,并解压到下面的位置。
curl https://download.java.net/java/GA/jdk17/0d483333a00540d886896bac774ff48b/35/GPL/openjdk-17_macos-x64_bin.tar.gz
tar -xfvz openjdk-17_macos-x64_bin.tar.gz -C /Library/Java/JavaVirtualMachines
- 更改已安装在Mac上的JDK。
$家目录/.bashrc
JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-17.jdk
PATH=$JAVA_HOME/bin:$PATH:~/development/flutter/bin:~/Library/Android/sdk/bin:~/Library/Android/sdk/tools/bin:~/Library/Android/sdk/platform-tools:/usr/local/opt/python@3.8/libexec/bin
确认
bb:~ yamamotodin$ java -version
openjdk version "17" 2021-09-14
OpenJDK Runtime Environment (build 17+35-2724)
OpenJDK 64-Bit Server VM (build 17+35-2724, mixed mode, sharing)
好的…… (Yoshi…)
- IntelliJ的设置
向IntelliJ添加JDK

将项目使用的JDK升级至17(好像有一瞬间出现过警告,但可能是我漏看了……)

按下旋转按钮以重新加载Maven配置,然后执行Maven清理。
开启spring boot运行
org.modelmapper:modelmapper:jar:2.3.5无法启动的错误。
[io/github/yoshikawaa/modelmapper/spring/boot/autoconfigure/ModelMapperAutoConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.modelmapper.ModelMapper]: Factory method 'modelMapper' threw exception; nested exception is org.modelmapper.ConfigurationException: ModelMapper configuration errors:
1) Failed to instantiate proxied instance of jp.n-resolution.project.transaction.history.repository.entity.TransactionHistoryEntity. Ensure that jp.n-resolution.project.transaction.history.repository.entity.TransactionHistoryEntity has a non-private constructor.
这是同样的问题吗?
立刻进入ModelMapper的世界!

java.lang.IllegalStateException:大小=2
这是什么东西呢?

因为有两种方法,所以不行吗?根据上下文来看,是指构造函数吗?
不行,我不懂。 , wǒ bù .)
为了确认是否真正以攻击不同方向的方式来应对,可以参考changelog
https://github.com/modelmapper/modelmapper/blob/master/CHANGES.md
2.3.6
New Features
Supports Java 13
看依赖关系,好像是2.3.5版本…嗯…
好像不支持java17呢。
因此,我得出结论是,目前modelmapper相关的工作无法进行。
如果您想使用ModelMapper,请删除此依赖(io.github.yoshikawaa.modelmapper.spring.boot:modelmapper-spring-boot-starter:pom:0.1.0),改为没有自动配置的情况下手动组装ModelMapper。可能是从Java 12或13开始不起作用。
但是原版ModelMapper的changelog中并没有提到对Java 17的正式支持,因此替换后的运行情况未知数。
在新的项目中尝试使用最新版本的modelmapper怎么样…
因此,目前将不会对现有项目进行jdk的更新。
另外,需要澄清的是,Spring Boot本身已经确认可以在java17上运行,因此这是由所使用的库所造成的情况。
这里的字模糊不清,无法辨认。