簡體   English   中英

Spring Boot+Java 9 Modules+Intellij Communicaty Edn:運行配置的行為不同於 jar 和 mvn spring-boot:運行

[英]Spring Boot+Java 9 Modules+Intellij Communicaty Edn: Run configuration behaves differently to jar and mvn spring-boot:run

我正在嘗試使用 JPA 和 H2 嵌入式數據庫來學習 Spring-Boot。 我創建了一個 repo,它復制了我在 github 上可用的問題。 它基於教程; 來源在這里找到。

我的最終狀態是使用以下所有方法將其作為單模塊項目運行:

  • mvn spring-boot:運行
  • 從 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 運行:運行。 退出代碼為 0。
  • 運行 jar。 退出代碼為 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.eaAccessingDataJpaApplication:使用 Java 15.0.2 開始 AccessingDataJpaApplication ...

c.eaAccessingDataJpaApplication:未設置活動配置文件,回退到默認配置文件:默認

.sdr.c.RepositoryConfigurationDelegate: Bootstrapping Spring Data JPA repositories in DEFAULT mode.

.sdr.c.RepositoryConfigurationDelegate:在 166 毫秒內完成 Spring 數據存儲庫掃描。 找到 1 個 JPA 存儲庫接口。

osjdeEmbeddedDatabaseFactory: 啟動嵌入式數據庫: 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:在 class 路徑資源 [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class] 中定義名稱為“entityManagerFactory”的 bean 創建錯誤:調用 init 方法失敗; 嵌套異常是 javax.persistence.PersistenceException: Unable to resolve persistence unit root URL

osjdeEmbeddedDatabaseFactory:關閉嵌入式數據庫:url='jdbc:h2:mem:3cb47b25-69e1-4122-bc0f-69447d509171;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=false'

作為 jar 或使用 mvn spring-boot 運行:運行並獲取退出代碼 0:

... c.eaAccessingDataJpaApplication: Starting AccessingDataJpaApplication v0.0.1-SNAPSHOT using Java 15.0.2 on... ... c.eaAccessingDataJpaApplication: No active profile set, falling > back to default profiles: default

... .sdr.c.RepositoryConfigurationDelegate: Bootstrapping Spring Data JPA repositories in DEFAULT mode.

... .sdr.c.RepositoryConfigurationDelegate:在 126 毫秒內完成 Spring 數據存儲庫掃描。 找到 1 個 JPA 存儲庫接口。

... com.zaxxer.hikari.HikariDataSource:HikariPool-1 - 已啟動。

... o.hibernate.jpa.internal.util.LogHelper:HHH000204:處理 PersistenceUnitInfo [名稱:默認值]

任何幫助將不勝感激。

我發現我的 module-info.java 文件中缺少以下要求語句。 現在運行, mvn spring-boot:run 和運行 jar 的行為方式相同。

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

我仍然不知道為什么這是 run main() 而不是其他兩種方法所必需的。 我相信它與 hibernate 有關,因為我在添加 java.xml.bind 后看到以下異常。

BeanCreationException (entityManagerFactory -> HibernateJpaConfiguration.class)

看起來我需要在我的 module-info.java 中明確指定傳遞依賴項,如果我使用的依賴項的模塊聲明需要傳遞,我認為我不必這樣做。

java.xml.bind 現在正在從兩個來源讀取 javax.activation 並顯示為錯誤。 其中之一來自spring-boot-starter-test ,盡管它在我的測試 scope 中。 隨着我了解更多信息,我將更新此答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM