![](/img/trans.png)
[英]Should spring-boot-autoconfigure use runtime dependencies?
[英]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")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.