测试小站: 处理网 回收帮 培训网 富贵论坛 老富贵论坛

将Spring引导应用程序迁移到Java 9-模块

  配置模块元数据

  Java 9中的模块信息通过module-info.java文件实现。第一步是在源目录的根目录下创建一个这样的文件,模块名称为:

  module org .springframework .samples .petclinic {}

  其余的旅程可以是天堂或地狱。我很幸运受益于IntelliJ IDEA许可证。IDE会告诉它什么类,它不能读取,一个向导可以将它放在模块文件中。最后,它看起来像:

  module org.springframework.samples.petclinic { requires java.xml.bind; 需要 javax.transaction.api; 需要 validation.api; 需要 hibernate.jpa; 需要 hibernate.validator; 需要春天 需要 spring.core; 需要 spring.context; 需要 spring.tx; 需要 spring.web; 需要 spring.webmvc; 需要 spring.datamons; 需要 spring.data.jpa; 需要 spring.boot; 需要 spring.boot.autoconfigure; 需要 cache.api;}

  请注意,在该模块的配置maven-compiler-plugin和maven-surefire-plugin可以被删除。

  配置未辅助的方式

  如果您碰巧处于不太理想的环境中,则该过程如下:

  跑 mvn clean test

  分析日志中的错误以获取有问题的包

  找到所述包装的JAR

  如果JAR是模块,请将模块名称添加到所需模块列表中

  如果没有,请计算自动模块名称,并将其添加到需要模块的列表中

  例如:

  [ERROR]?/ spring-petclinic / src / main / java / org / springframework / samples / petclinic / system / CacheConfig。的java: [ 21,16 ]

  程序包javax.cache 不可见(错误)(javax.cache包在未命名的模块中声明,但是javax.cache 模块没有读取它)

  javax.cache位于cache-api-1.0.0.jar。这不是一个模块,因为module-infoJAR中没有。自动模块名称为cache.api。把它写成requires模块中的一个。冲洗并重复。

  ASM故障

  自从这篇文章的第一部分,我已经意识到,Spring Boot 1.5将不会与Java 9兼容。我们开始做吧。

  将弹簧引导到2.0.0.M5需要对模块依赖性进行一些更改:

  hibernate.validator 至 org.hibernate.validator

  validation.api 至 java.validation

  只要你认为它可能工作:

  造成 的:java的.lang timeException

  在 组织.springframework .ASM .ClassVisitor .visitModule(ClassVisitor 的.java :148)

  这个问题已经记录在案。此时,明确声明主类可解决问题。

  < 插件 >

  < 的groupId > org.springframework.boot

  < artifactId的 >弹簧引导行家-插件

  < 配置 >

  < jvmArguments > --add模块java.xml.bind

  < mainClass > org.springframework.samples.petclinic.PetClinicApplication

  

  ...

  Javassist失败

  该应用程序现在已经准备好进行测试了mvn clean spring-boot:run。不幸的是,我们有一个新的例外:

  2021 -10 -16 17:20:22.552 INFO 45661 --- [main] utoConfigurationReportLoggingInitializer:启动ApplicationContext时出错。为了显示汽车构型的报告重新运行你的应用程序与 启用“调试”。2021 -10 -16 17:20:22.561 错误 45661 --- [main] osboot.SpringApplication:

  应用启动失败org.springframework.beans.factory.BeanCreationException:

  错误创建豆与名'的entityManagerFactory'在类路径资源定义

  [组织/ springframework的的/ boot /自动配置/ ORM / JPA / HibernateJpaAutoConfiguration。班级 ]:

  调用的 init方法失败; 嵌套异常是 org.hibernate.boot.archive.spi.ArchiveException:

  能不能建立ClassFile的

  快速搜索重定向到Java 9和Javassist之间的不兼容性。Javassist是这里的罪魁祸首。依赖关系需要Spring Data JPA,通过Hibernate传递。要解决它,排除依赖关系,并添加最新版本:

  < dependency >

  < groupId > org.springframework.boot

  < artifactId > spring-boot-starter-data-jpa

  < 排除 >

  < 排除 >

  < artifactId > javassist

  < groupId > org。了Javassist

  

   < 依赖性 >

  < 的groupId > org.javassist

  < artifactId的 >了Javassist

  < 版本 > 3.22.0-GA

  < scope > runtime

  幸运的是,版本是兼容的 - 至少对于我们的使用。

  有用!

  我们做到了!如果你到达这一点,你应该在肩上轻拍,一杯啤酒,或任何你认为应得的东西。

  在蛋糕上结冰,可以重新添加开发工具依赖关系。

  结论

  迁移到Java 9需要使用拼图,无论你喜欢还是不喜欢。至少这意味着一个痛苦的试验和错误搜索 - 下一个修复过程,并删除构建过程中的重要步骤。尽管图书馆/框架开发人员对其内部API添加了一个额外的访问控制层也是非常有趣的,但对于应用程序来说,这一点更是如此。在这个阶段,不值得转移到Java 9。

  我希望在几个月后再次进行这个实验,并注意到情况有所改善。

  1、具有1-5工作经验的,面对目前流行的技术不知从何下手,

  需要突破技术瓶颈的。2、在公司待久了,过得很安逸,

  但跳槽时面试碰壁。需要在短时间内进修、跳槽拿高薪的。

  3、如果没有工作经验,但基础非常扎实,对java工作机制,

  常用设计思想,常用java开发框架掌握熟练的。

  4、觉得自己很牛B,一般需求都能搞定。

  但是所学的知识点没有系统化,很难在技术领域继续突破的。

posted @ 2021-12-20 15:36  linjingyg  阅读(123)  评论(0)    收藏  举报