spring-boot通過maven的依賴管理為我們寫好了很多依賴項及其版本,我們可拿來使用。spring-boot文檔介紹了兩種使用方法,一是繼承,二是導入。
通過<parent>繼承:
<project> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.1.9.RELEASE</version> </parent>
</project>
或者在<dependencyManagement>中導入:
<dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>1.1.9.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency>
</dependencies> </dependencyManagement>
此外,在其文檔里說到,繼承時可簡單地通過屬性定制依賴項版本。比如,改為使用較新的spring-4.1.6.RELEASE版本:
<properties> <spring.version>4.1.6.RELEASE<spring.version> </properties>
不過,此法只對繼承有效,導入無效。以下摘自其文檔說明:
This only works if your Maven project inherits (directly or indirectly) from spring-boot-dependencies. If you have added spring-boot-dependencies in your own dependencyManagement section with <scope>import</scope> you have to redefine the artifact yourself instead of overriding the property.
這里說到,如要導入后修改依賴項版本就只能自己重新去定義了。
需要注意的是,導入后再重新定義既繁瑣又不安全。比如,spring-boot定義了8個tomcat依賴項,如果你導入后只重定義了部分tomcat依賴項及其版本,則將造成版本不一致的問題。
那么導入時有沒有既簡單又安全的方法呢?我們可先繼承后導入!
1、先建一個過渡性工程,繼承后定制依賴項的版本。
<project> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>1.1.9.RELEASE</version> </parent> <groupId>mycomp</groupId> <artifactId>myproject-spring-boot-bom</artifactId> <version>1.1.9</version> <packaging>pom</packaging> <properties> <spring.version>4.1.6.RELEASE</spring.version> </properties> </project>
2、然后導入到自己的工程里。
<project> <modelVersion>4.0.0</modelVersion> <groupId>mycomp</groupId> <artifactId>myproject</artifactId> <version>0.0.1-SNAPSHOT</version> <dependencyManagement> <dependencies> <dependency> <groupId>mycomp</groupId> <artifactId>myproject-spring-boot-bom</artifactId> <version>1.1.9</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> </project>
這樣,雖然多建了一個過渡性工程,但定制依賴項版本同繼承時一樣簡單。