前言
因爲疫情的原因,最近都是遠程辦公。此前沒有系統的學習過Maven,在項目中只是做添加依賴,刪除依賴等基本操作,在看公司項目代碼時,突然看不懂pom文件的內容了,一些關鍵字都不知道是幹什麼的;遂通過B站找了些教程做以下記錄。
正文
這篇文章的主要關注點是聚合工程中maven是如何實現依賴管理,依賴繼承、依賴排除等。
關於父pom
以下文件展示了一個父pom所需的常用配置
<?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.lhc</groupId>
<artifactId>springcloud</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.1.RELEASE</version>
<relativePath/>
</parent>
<!-- 版本和屬性配置 -->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<org.mapstruct.version>1.2.0.Final</org.mapstruct.version>
<spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
</properties>
<!--配置依賴管理-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--spring-cloud-alibaba-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.0.1.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
<scope>compile</scope>
</dependency>
</dependencies>
</dependencyManagement>
<!--子工程聚合-->
<modules>
<module>eurekaserver</module>
<module>serviceproducer</module>
<module>service-ribbon</module>
<module>service-feign</module>
<module>service-zuul</module>
</modules>
</project>
關於依賴的屬scope屬性
屬性有三個值,且適用於不同場景
- compile(默認):在編譯,測試、運行和打包過程中,此Jar包一直存在
- provided: 在編譯,測試,運行姐u但存在
- test:只在測試階段存在
junit適用與test
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
lombok適用於provided
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
關於依賴的版本控制
父工程
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencyManagement>
子工程
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
父工程增加了依賴,子工程直接引用即可,不寫版本號;寫版本好則覆蓋父依賴
依賴排除
<dependency>
<groupId>com.lhc</groupId>
<artifactId>service-feign</artifactId>
<version>0.0.1-SNAPSHOT</version>
<exclusions>
<exclusion>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
</exclusion>
</exclusions>
</dependency>
兩個工程相互依賴,添加exclusions排除不需要的Jar包即可
如有錯誤,還請指正
原文地址:https://www.haicheng.website/passages/about-maven-package/