在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

image.png

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

image.png

按下旋转按钮以重新加载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的世界!

image.png

java.lang.IllegalStateException:大小=2

这是什么东西呢?

image.png

因为有两种方法,所以不行吗?根据上下文来看,是指构造函数吗?

不行,我不懂。 , 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上运行,因此这是由所使用的库所造成的情况。

这里的字模糊不清,无法辨认。

广告
将在 10 秒后关闭
bannerAds