我檢查了模塊的源代碼spring-boot-autoconfigure
它具有大量技術的配置類:資料、redis、cassandra、JPA、LDAP 等...
這個模塊如何在不將所有這些技術依賴項包含在其 POM 中的情況下正確編譯?
如果我舉個例子HibernateJpaAutoConfiguration class:
它使用來自其他 Spring 模塊的 bean/類,例如spring-orm:
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
但是在其 POMspring-boot-autoconfigure中沒有依賴關系。spring-orm那么如何編譯呢?
uj5u.com熱心網友回復:
這是可能的,因為它們應用了 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)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/488036.html
