【问题标题】:Spring Boot+Java 9 Modules+Intellij Communicaty Edn: Run configuration behaves differently to jar and mvn spring-boot:runSpring Boot+Java 9 Modules+Intellij Communicaty Edn:运行配置的行为与 jar 和 mvn spring-boot:run 不同
【发布时间】:2021-05-07 21:03:47
【问题描述】:

我正在尝试使用 JPA 和 H2 嵌入式数据库来学习 Spring-Boot。 我创建了一个 repo 来复制我的问题 available on github。 它基于教程;来源找到here

我的最终状态是使用以下所有方法将其作为单模块项目运行:

  • mvn spring-boot:run
  • 在 Intellij 中从目标运行 jar
  • 在 Intellij 中运行 main() 方法

目前 main() 方法的作用与其他两种方法不同,但我不知道为什么。

如果我删除 module-info.java 文件,那么所有方法都会退出 0。我知道我可以忽略它,但我想在这里学习, 所以我想知道发生了什么。

Intellij 构建信息:

IntelliJ IDEA 2020.3.2(社区版)Build #IC-203.7148.57, 建于 2021 年 1 月 26 日

设置了 jdk 15 但没有 module-info.java:

  • 以 Intellij 运行配置运行。退出代码为 0。
  • 使用 mvn spring-boot:run 运行。退出代码为 0。
  • 运行罐子。退出代码为 0。

将以下module-info.java 文件添加到/src/main/java:

module demo {
    exports com.example.accessingdatajpa;
    opens com.example.accessingdatajpa;

    requires org.slf4j;
    requires spring.boot;
    requires spring.boot.autoconfigure;
    requires spring.context;
    requires spring.data.commons;
    requires java.persistence;
    requires java.sql;
}

通过在 intellij 中运行 main() 来运行应用程序并获得退出 1:

c.e.a.AccessingDataJpaApplication : 使用 Java 15.0.2 启动 AccessingDataJpaApplication ...

c.e.a.AccessingDataJpaApplication : 未设置活动配置文件,回退到默认配置文件:默认

.s.d.r.c.RepositoryConfigurationDelegate : 在默认模式下引导 Spring Data JPA 存储库。

.s.d.r.c.RepositoryConfigurationDelegate :在 166 毫秒内完成 Spring Data 存储库扫描。找到 1 个 JPA 存储库接口。

o.s.j.d.e.EmbeddedDatabaseFactory:启动嵌入式数据库:url='jdbc:h2:mem:3cb47b25-69e1-4122-bc0f-69447d509171;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=false', username='sa'

s.c.a.AnnotationConfigApplicationContext : 上下文初始化期间遇到异常 - 取消刷新尝试:

org.springframework.beans.factory.BeanCreationException:在类路径资源 [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class] 中定义名称为“entityManagerFactory”的 bean 创建错误:调用 init 方法失败;嵌套异常是 javax.persistence.PersistenceException: Unable to resolve persistence unit root URL

o.s.j.d.e.EmbeddedDatabaseFactory:关闭嵌入式数据库:url='jdbc:h2:mem:3cb47b25-69e1-4122-bc0f-69447d509171;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=false'

作为 jar 或使用 mvn spring-boot:run 运行并获取退出代码 0:

... c.e.a.AccessingDataJpaApplication : 在 ... 上使用 Java 15.0.2 启动 AccessingDataJpaApplication v0.0.1-SNAPSHOT ... c.e.a.AccessingDataJpaApplication :没有活动的配置文件集,下降>回到默认配置文件:默认

... .s.d.r.c.RepositoryConfigurationDelegate : 引导 Spring Data JPA 默认模式下的存储库。

... .s.d.r.c.RepositoryConfigurationDelegate : 完成 Spring 数据存储库 扫描时间为 126 毫秒。找到 1 个 JPA 存储库接口。

... com.zaxxer.hikari.HikariDataSource : HikariPool-1 - 已启动。

... o.hibernate.jpa.internal.util.LogHelper:HHH000204:处理中 PersistenceUnitInfo [名称:默认]

任何帮助将不胜感激。

【问题讨论】:

    标签: java spring spring-boot hibernate intellij-idea


    【解决方案1】:

    我发现我的 module-info.java 文件中缺少以下需求语句。现在运行,mvn spring-boot:run 和运行 jar 的行为相同。

    requires java.xml.bind; 
    requires net.bytebuddy; 
    requires com.fasterxml.classmate;
    

    我仍然不知道 为什么 这是运行 main() 而不是其他两种方法所必需的。我相信这与休眠有关,因为我在添加 java.xml.bind 后看到以下异常。

    BeanCreationException (entityManagerFactory -> HibernateJpaConfiguration.class)

    看起来我需要在我的 module-info.java 中明确指定传递依赖项,如果我的依赖项的模块声明使用 requires transitive,我认为我不必这样做。

    此外,java.xml.bind 现在正在从两个来源读取 javax.activation 并显示为错误。其中之一来自 spring-boot-starter-test 尽管它在我的测试范围内。当我了解更多信息时,我会更新这个答案。

    【讨论】:

      猜你喜欢
      • 2016-10-09
      • 2018-04-25
      • 2018-04-20
      • 2022-11-23
      • 2016-11-16
      • 2019-03-14
      • 2017-04-26
      相关资源
      最近更新 更多