Maven中如何管理多模組專案的依賴關係
Maven 中如何管理多模組專案的依賴關係
平時在檢視專案的過程中,發現包的依賴關係及其隨便,在各個子模組中都各自引入相應的依賴包,有些時候重複匯入了也不會發覺。
在參考alibaba dubbo的原始碼之後,做出如下總結(別人家的程式碼 ==!)
groupId:組織標識,一般為:公司網址的反寫+專案名
artifactId:專案名稱,一般為:專案名-模組名
1.首先建一個空的maven專案,專案只需要一個pom.xml
檔案
交代一下我的demo
專案(root)的groupId
是com.nezha.learn.demo
專案名稱 artifactId
是 demo
該專案有三個子模組:
<!--使用Jedis依賴-->
<module>demo-redis</module>
<!--主要用於管理依賴關係-->
<module>demo-parent</module>
<!--使用spring boot的依賴-->
<module>demo-juc</module>
2.通過IDEA
中New
> Module
來構建多個模組
其中的pom.xml
檔案如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.nezha.learn.demo</groupId>
<artifactId>demo</artifactId>
<packaging>pom</packaging>
<version>1.1-SNAPSHOT</version>
<!--這裡是我們的子模組列表-->
<modules>
<!--使用Jedis依賴-->
<module>demo-redis</module>
<!--主要用於管理依賴關係-->
<module>demo-parent</module>
<!--使用spring boot的依賴-->
<module>demo-juc</module>
</modules>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>2.4.1</version>
<configuration>
<autoVersionSubmodules>true</autoVersionSubmodules>
</configuration>
</plugin>
</plugins>
</build>
</project>
3.建立一個專門管理依賴包的模組
同樣,該模組只有一個
pom.xml
檔案
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>demo</artifactId>
<groupId>com.nezha.learn.demo</groupId>
<version>1.1-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
<packaging>pom</packaging>
<artifactId>demo-parent</artifactId>
<!--集中配置版本關係-->
<properties>
<jedis.version>2.9.0</jedis.version>
<spring-boot.version>1.5.2.RELEASE</spring-boot.version>
</properties>
<!--此處 dependencyManagement 並不會直接引入依賴,是一種懶載入的方式-->
<dependencyManagement>
<dependencies>
<!--引入Redis的客戶端-->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>${jedis.version}</version>
</dependency>
<!--引入spring boot的依賴-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
注意此處的artifactId
是專案名稱,因為所有子模組的依賴都在專案root
的pom.xml
中定義的。
4.在子模組中引入demo-paren
的依賴
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>demo-parent</artifactId>
<groupId>com.nezha.learn.demo</groupId>
<version>1.1-SNAPSHOT</version>
<relativePath>../demo-parent/pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>demo-juc</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>demo-redis</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
</project>
注意此處的
artifactId
是demo-parent
此時引入的spring依賴是不需要加上版本號的
然後${project.groupId}
和${project.version
用於指代專案和版本。
如何更新所有子模組的版本號
這個也好解決,Maven有外掛鴨!
在父級的pom.xml
中加個外掛就OK了,plugins
> release
> update-versions
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>2.4.1</version>
<configuration>
<autoVersionSubmodules>true</autoVersionSubmodules>
</configuration>
</plugin>
</plugins>
</build>
maven的pom檔案報錯: must be "pom" but is "jar"
parent工程的pom.xml檔案的project節點下加入如下節點:
<packaging>pom</packaging>
參考文獻
- @Maven POM 詳解:https://www.jianshu.com/p/8417a94c4d94
- 使用maven-release-plugin自動化版本釋出https://blog.csdn.net/shenchaohao12321/article/details/79302791
- spring dubbo的原始碼:https://github.com/apache/incubator-dubbo-spring-boot-project
相關文章
- 專案管理中,如何識別和管理依賴關係?專案管理
- 如何管理前端專案中的複雜依賴關係前端
- Maven 依賴關係Maven
- Maven如何只打包專案某個模組及其依賴模組?Maven
- 什麼是專案管理中的任務依賴關係專案管理
- OSGI中的service依賴關係管理
- 【Java】【專案構建】Idea中設定Gradle/Maven多模組依賴JavaIdeaGradleMaven
- maven中scope依賴範圍與classpath的關係Maven
- Android專案的依賴關係解析Android
- Spring框架模組依賴關係Spring框架
- depmod解決模組依賴關係
- 微服務下 Spring Boot Maven 工程依賴關係管理微服務Spring BootMaven
- 如何使用Maven將專案中的依賴打進jar包MavenJAR
- eclipse中maven專案不顯示Maven Dependencies依賴EclipseMaven
- Maven依賴管理:控制依賴的傳遞Maven
- .NET Core新增專案之間的依賴關係
- 使用Gradle檢視Android專案中庫的依賴關係GradleAndroid
- IDEA Maven無法新增依賴到專案中IdeaMaven
- IDEA中Maven顯示存在依賴但專案中並未匯入依賴JARIdeaMavenJAR
- 如何正確地實現Java模組與inter-module Maven構建測試依賴關係JavaMaven
- Maven依賴管理系統Maven
- Maven快速入門(五)Maven的依賴管理Maven
- Maven的頂級功能——依賴管理Maven
- 普通maven專案將依賴包打包方法Maven
- 使用yum 安裝依賴關係較多的包
- Maven最佳實踐:管理依賴Maven
- 關聯關係與依賴關係的區別
- build task依賴關係UI
- Maven-Maven統一管理依賴的版本Maven
- 分散式專案中,選型與依賴管理分散式
- 使用godep管理Golang專案依賴Golang
- 使用govendor管理Golang專案依賴Golang
- Maven依賴中的scope詳解Maven
- maven多模組管理Maven
- gcc 標頭檔案依賴關係 分析工具GC
- Maven把專案依賴的所有jar包都打到同一個jar中MavenJAR
- IntelliJ IDEA中建立Web聚合專案(Maven多模組專案)IntelliJIdeaWebMaven
- eclipse中基於maven構建多模組專案EclipseMaven