Maven筆記
- 配置本地倉庫位置
- 配置阿裡雲的源
- 約定的項目結構
- 常用的指令
- 生命周期
- 安裝maven插件
- 依賴傳遞
- 依賴沖突
- 依賴範圍
- 聚合
- 繼承
下載下傳,環境變量配置跳過
首先設定\conf\settings.xml檔案
配置本地倉庫位置
配置阿裡雲的源
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>阿裡雲公共倉庫</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>阿裡雲谷歌倉庫</name>
<url>https://maven.aliyun.com/repository/google</url>
</mirror>
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>阿裡雲阿帕奇倉庫</name>
<url>https://maven.aliyun.com/repository/apache-snapshots</url>
</mirror>
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>阿裡雲spring倉庫</name>
<url>https://maven.aliyun.com/repository/spring</url>
</mirror>
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>阿裡雲spring插件倉庫</name>
<url>https://maven.aliyun.com/repository/spring-plugin</url>
</mirror>
</mirrors>
約定的項目結構
main
java
package //源碼
test
java
package //單元測試
resources //資源
常用的指令
compile 編譯
test 運作單元測試
package 打包
clean 清除target
install 安裝jar包到本地倉庫中
生命周期
周期 | 含義 |
---|---|
clean | 清理項目 |
default | 建構項目(最核心) |
site | 生成項目站點 |
clean 的三個階段
pre-clean 執行清理前的工作
clean 清理上一次建構生成的所有檔案檔案
post-clean 執行清理後的檔案
default 常用的幾個階段
compile 編譯
test 測試
package 打包
install 安裝包到本地倉庫
site 的四個階段
pre-site 在生成項目站點前要完成的工作
site 生成項目的站點文檔
post-site 在生成項目站點後要完成的工作
site-deploy 釋出生成的站點到伺服器上
安裝maven插件
修改pom.xml檔案
<build>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
<!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
<plugin>
<artifactId>maven-site-plugin</artifactId>
<version>3.7.1</version>
</plugin>
<plugin>
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>3.0.0</version>
</plugin>
<!--綁定插件到某個執行步驟-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.4</version>
<!--這裡就是綁定source插件到package,執行package時會執行source,試過了,不知道為什麼不好使-->
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
</build>
依賴傳遞
如果A依賴B,B依賴C,那麼A也會依賴C
如果我們依賴B的時候,不希望依賴B所依賴的C,那麼我們可以用如下配置排除B的依賴項依賴
<dependency>
<groupId>B</groupId>
<artifactId>B</artifactId>
<version>0.0.1</version>
<exclusions>
<exclusion>
<groupId>C</groupId>
<artifactId>C</artifactId>
</exclusion>
</exclusions>
</dependency>
排除B的所有依賴項
<dependency>
<groupId>B</groupId>
<artifactId>B</artifactId>
<version>0.0.1</version>
<exclusions>
<exclusion>
<groupId>*</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency>
依賴沖突
最短路徑優先
比如A依賴B,B依賴C,同時B依賴M的1.0版本,然後C又依賴M的2.0版本,那麼A會遵循B的依賴,依賴的是M的1.0版本
先聲明優先
比如A依賴B,A又依賴C,同時B依賴M的1.0版本,C又依賴M的2.0版本,那麼在A的pom.xml檔案中,對誰的依賴寫在前面,A就遵循誰的依賴
依賴範圍
具體看這個人的文章吧
https://blog.csdn.net/seasonsbin/article/details/79093647
聚合
假設有如下幾個子產品
chameleon-core
chameleon-simple
chameleon-common
chameleon-config-web
chameleon-web
chameleon-sso
在父項目的pom.xml檔案中添加
<modules>
<module>chameleon-core</module>
<module>chameleon-simple</module>
<module>chameleon-common</module>
<module>chameleon-config-web</module>
<module>chameleon-web</module>
<module>chameleon-sso</module>
</modules>
然後在執行一個build的時候就會将這些一起build了
繼承
建立一個項目,pom.xml中進行如下配置,除了packaging節點,其他都是你自己起名的,注意
packaging節點改成pom
<groupId>com.chameleon</groupId>
<artifactId>chameleon</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
在子項目的pom.xml檔案中添加如下内容,就會繼承父pom了
<parent>
<artifactId>chameleon</artifactId>
<groupId>com.chameleon</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
将版本号提取成屬性
在pom.xml的properties節點中添加随便起名的節點,我起名為junit.ver
<properties>
<junit.ver>4.12</junit.ver>
</properties>
然後使用該屬性的時候就這樣使用就可以了
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.ver}</version>
<scope>test</scope>
</dependency>
dependencyManagement标簽,在父項目的pom.xml檔案中,添加這個标簽
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.ver}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>18.0</version>
</dependency>
</dependencies>
</dependencyManagement>
然後在子項目中引用junit的時候就不再需要聲明version和scope了
需要注意的是dependencyManagement标簽不會引入相關的jar,他隻是對依賴的聲明,當子項目需要引用dependencyManagement中聲明的依賴時,需要在pom.xml中顯式的聲明
子項目中進行如下的聲明才會真正的引用相關jar包
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
</dependency>
</dependencies>