簡體   English   中英

Spring Boot 自動配置及其依賴項

[英]Spring Boot autoconfigure and its dependencies

我檢查了模塊spring-boot-autoconfigure的源代碼

它具有大量技術的配置類:數據、redis、cassandra、JPA、LDAP 等...

這個模塊如何在不將所有這些技術依賴項包含在其 POM 中的情況下正確編譯?

如果我以HibernateJpaAutoConfiguration class為例:

它使用來自其他 Spring 模塊(如spring-orm bean/類:

import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;

但是spring-boot-autoconfigure在其 POM 中不依賴於spring-orm 那么如何編譯呢?

這是可能的,因為它們應用了 Maven 的可選依賴概念

當無法(無論出於何種原因)將項目拆分為子模塊時,將使用可選依賴項。 這個想法是,某些依賴項僅用於項目中的某些功能,如果不使用該功能,則不需要。 (...) 然而,由於項目不能被拆分(同樣,無論出於何種原因),這些依賴項被聲明為可選的。 如果用戶想要使用與可選依賴項相關的功能,他們必須在自己的項目中重新聲明該可選依賴項。

在 Maven 中,它通常看起來像這樣:

<dependency>
    <groupId>sample.ProjectA</groupId>
    <artifactId>Project-A</artifactId>
    <version>1.0</version>
    <optional>true</optional>
</dependency>

在本例中,項目是使用 Project-A 編譯的。 但是,Project-A 不共享為傳遞依賴項。

Spring Boot 的開發者使用 Gradle 而不是 Maven。 他們編寫了自己的 Gradle 插件來復制這種行為。 結果如下所示:

dependencies {
    ...
    optional("org.springframework:spring-orm")

(見spring-boot-autoconfigure/build.gradle

暫無
暫無

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

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