在我們的項目開發過程中,常常會使用Maven作為依賴,來快速地引入依賴進行開發。很多人都知道maven或者使用的次數也非常多,今天我們就來了解一下maven,系統地介紹一下。
1、Maven的基本概念
Maven是跨平臺的項目管理工具。主要服務于基于Java平臺的項目構建,依賴管理和項目信息管理。接下來我們就來介紹一下項目構建和依賴管理。
1.1、項目構建
項目構建過程包括【清理項目】→【編譯項目】→【測試項目】→【生成測試報告】→【打包項目】→【安裝項目】→【部署項目】這幾個步驟,這幾個步驟就是一個項目的完整構建過程,我們在項目開發過程中不一定需要使用所有的步驟,往往只需要使用到其中幾個關鍵步驟。
[1] 清理clean:將以前編譯得到的舊文件class字節碼文件刪除,為下一次編譯做準備;
[2] 編譯compile:將java源程序編譯成class字節碼文件;
[3] 測試test:自動測試,自動調用junit程序;
[4] 報告report:測試程序執行的結果;
[5] 打包package:動態Web工程打War包,java工程打jar包;
[6] 安裝install:Maven特定的概念—–將打包得到的文件復制到“倉庫”中的指定位置;
[7] 部署deploy:將動態Web工程生成的war包復制到Servlet容器下,使其可以運行;
相關的maven命令:
- mvn clean:清理;
- mvn compile:編譯主程序;
- mvn test-compile:編譯測試程序;
- mvn test:執行測試;
- mvn package:打包;
- mvn install:安裝jar到本地倉庫;
- mvn deploy:將最終的包復制到遠程的倉庫,以讓其它開發人員與項目共享;
- mvn site:生成項目站點信息;
- mvn clean install:組合命令,告訴Maven clean在每個模塊中執行install階段;
1.2、依賴管理
依賴指的是jar包之間的相互依賴,比如我們搭建一個struts2的開發框架時,如果只有struts2-core.jar這個jar包是不行的,struts2-core.jar還依賴其它的jar包,依賴管理指的就是使用Maven來管理項目中使用到的jar包,Maven管理的方式就是“自動下載項目所需要的jar包,統一管理jar包之間的依賴關系”。
2、Maven安裝
2.1、安裝或者查看環境
首先要確保開發環境已經安裝了JDK,配置好JDK的環境變量,使用如下的兩個命令檢查檢查JDK安裝的情況。
① Echo %JAVA_HOME%
② Java –version
2.2、下載maven
到官網maven.apache.org下載對應操作系統的版本,比如我是windows系統,我會選擇下載apache-maven-3.8.6-bin.zip,下載之后對zip壓縮文件進行解壓。如果是linux操作系統,可以下載后綴是gz格式的壓縮包。
2.3、設置系統環境變量
桌面“我的電腦”->右鍵打開“屬性”->“高級系統設置”->"環境變量" 中設置 MAVEN_HOME,設置為maven的解壓縮目錄。小編之前已經安裝了3.8.1版本,而不是最新的3.8.6版本,后續以此版本截圖說明。
2.4、設置環境變量Path
將%MAVEN_HOME%bin加入Path中,一定要注意要用分號;與其他值隔開。%MAVEN_HOME%bin代表的就是"D:installapache-maven-3.8.1bin"目錄(這是我的安裝目錄,每個人這里對應的自己的安裝目錄)。
2.5、驗證Maven安裝是否成功
打開cmd窗口,輸入"mvn –v"命令 查看Maven的相關信息。會顯示maven的版本、jdk的版本信息以及操作信息的相關信息。
3、Maven的簡單使用
3.1、Maven項目的目錄約定
3.2、maven的配置文件setting.xml
我們先來了解一下setting.xml 配置文件格式和內容。
上面這個例子看起來比較復雜,但我們在實際使用中往往只關注兩個方面,一個是配置本地倉庫的路徑,一個是設置下載依賴的來源。
<!--本地倉庫。該值表示構建系統本地倉庫的路徑。其默認值為~/.m2/repository。 --> <localRepository>E:mavenRepositoryrepository</localRepository><!--為倉庫列表配置的下載鏡像列表。 --> <mirror> <id>nexus-aliyun</id> <mirrorOf>central</mirrorOf> <name>Nexus aliyun</name> <url>http://maven.aliyun.com/nexus/content/groups/public</url></mirror>
配置好setting.xml 配置文件,然后就可以在開發工具中引入,我以IntelliJ IDEA為例。
4、Maven坐標
maven項目,跟maven相關的最重要的文件就是pom.xml文件了,我們來了解一下。
4.1、Maven坐標主要組成
- groupId:組織標識(包名);
- artifactId:項目名稱;
- version:項目的當前版本;
- packaging:項目的打包方式,最為常見的jar和war兩種。
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.4.1</version> <relativePath /></parent><groupId>com.bianchengxia.springboot</groupId><artifactId>springboot</artifactId><version>0.0.1-SNAPSHOT</version><name>springboot</name><packaging>jar</packaging> <!-- jar或者war -->
4.2、依賴管理
我們在標簽對dependencies內,引入項目所需要的依賴。
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-autoconfigure</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.2</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!--切面日志 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency> <!--mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.3</version> </dependency> <!-- mysql依賴jar --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.22</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency></dependencies>
4.3、添加外部依賴
正常的我們引入遠程倉庫的依賴,直接可以是使用上面的方式,但是如果我們需要引入項目里面的依賴,比如一個開源的項目有一個私有的依賴包,我們下載下來之后需要引入才能正常運行或者打包。那我們就可以使用下面的方式:除了引入依賴之外,再添加配置,設置includeSystemScope為true。
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <!--打包時將外部引入的jar包打包,不加此配置,本地可以運行,但服務器上jar中是沒有的--> <includeSystemScope>true</includeSystemScope> </configuration> </plugin> </plugins></build>
5、Maven倉庫
maven倉庫的分類:本地倉庫和遠程倉庫。其中遠程倉庫包括中央倉庫、私服和其他公共庫。
5.1、遠程倉庫
(1)中央倉庫:Maven默認的遠程倉庫,中央倉庫是遠程倉的核心。中央倉庫包含了絕大多數流行開源Java構件,以及源碼、作者信息、SCM、信息、許可證信息等。如果中央倉庫慢可以用mirrors來替換它,它的id是central。
<!-- 中央倉庫 --><repositories> <repository> <id>central</id> <name>Central Repository</name> <url>http://repo.maven.apache.org/maven2</url> <layout>default</layout> <snapshots> <enabled>false</enabled> </snapshots> </repository></repositories>
(2)私服:是一種特殊的遠程倉庫,maven私服是指私有服務器,是針對局域網而言的,目的是代理遠程倉庫及部署第三方構建,很多公司會搭建自己的私服。有了私服之后,當 Maven 需要下載構件時,直接請求私服,私服上存在則下載到本地倉庫;否則,私服請求外部的遠程倉庫,將構件下載到私服,再提供給本地倉庫下載。
(3)其他公共庫:默認的遠程倉庫也就是中央倉庫往往下載比較慢,所以很多公司會搭建私服,但是搭建私服也比較麻煩,這個時候有人就想,能不能使用“拿來主義”直接使用別人搭建好的倉庫呢?當然可以,這就是其他公共庫,對外開放,我們可以直接使用。比如我們在上面的setting.xml 配置文件里面<mirror>標簽對里面設置的倉庫,就是阿里云開放的公共倉庫。
5.2、本地倉庫
maven在本地存儲構件的路徑,一般本地倉庫地址可以在settings.xml里邊指定。我們在上面介紹settings.xml文件時也說明了,設置localRepository元素的值為本地倉庫路徑。
6、maven模塊聚合和繼承
6.1、頂級pom文件配置
6.2、模塊聚合配置
6.3、繼承配置代碼
繼承代碼過程中,可以定義屬性,例如:
<!--屬性定義--><properties> <!--項目構建基本配置--> <spring.version>3.2.0.RELEASE</spring.version> <struts.version>2.3.15.1</struts.version> <servlet.version>3.0.1</servlet.version> <urlrewriter.version>4.0.4</urlrewriter.version></properties>
訪問屬性的方式為${junit.version},例如:
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> <scope>test</scope></dependency>
父模塊用dependencyManagement進行管理:
<dependencyManagement> <dependencies> <dependency> <groupId>com.tydic.framework</groupId> <artifactId>frameworkbase</artifactId> <version>${framework.version}</version> </dependency> </dependencies><dependencyManagement>
版權聲明:本文內容由互聯網用戶自發貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如發現本站有涉嫌抄襲侵權/違法違規的內容, 請發送郵件至 舉報,一經查實,本站將立刻刪除。