1. 程式人生 > >Maven專案的構建與管理

Maven專案的構建與管理

1.Maven命令

Maven是Apache的一個跨平臺的軟體專案管理和構建工具,主要用於基於java平臺的專案構建、依賴管理。

Maven專案構建過程如上圖所示,主要構建命令有幾種:

mvn validate驗證,驗證專案是正確的並且所有的資訊是可用的;

mvnclean 清理,清理專案快取輸出,一般是target資料夾被刪除;

mvncompile 編譯,將java原始檔編譯成.class檔案;

mvn test測試,生成測試報告,執行test目錄下的所有單元測試;

mvnpackage 打包,將專案打成jar、war或者pom;

mvninstall 安裝,將當前專案安裝到本地maven庫,供其他專案依賴。

mvn deploy部署,在構建環境中完成,複製最終的包到遠端庫。

執行後面的命令會自動執行前面的命令,比如執行mvn package時會執行validate、clean、compile、test、package五個階段。

2.Maven安裝與配置

1)安裝jdk1.7並配置環境變數

2)安裝並配置maven環境變數

到maven官網下載maven最新版壓縮包,解壓到本地,新增系統環境變數

MAVEN_HOME: D:\develop\apache-maven-3.5.0

Path: % MAVEN _HOME%\bin

以上兩步配置完畢後,在命令列執行mvn –v,可以maven版本資訊和基本配置資訊表示配置成功。

3)自定義maven倉庫位置

找到maven安裝目錄conf,開啟setting檔案,修改localRepository節點配置為指定路徑即可,比如:<localRepository>D:/maven/repository</localRepository>

4)maven安裝目錄結構

說明:

   bin中存放可執行的二進位制檔案

   conf存放settings.xml檔案

   lib  執行maven所依賴的jar包

5)maven專案目錄約定

src/main/java      存放專案的java原始檔

src/main/resources  存放專案的資原始檔,如spring,hibernate、mybatis的配置檔案

src/test/java      存放所有的測試的java檔案

src/test/resources   存放測試用的資原始檔

target            專案輸出位置

pom.xml  依賴管理檔案

3.Maven核心概念

1)專案物件模型

說明:maven根據pom.xml檔案,把它轉化成專案物件模型(POM),這時要解析依賴關係,然後去相對應的maven庫中查詢所依賴的jar包。在clean,compile,test,package等生命週期階段都有相應的Plug-in來做這些事情,而這些plug-in會產生一些中間產物。

2)maven倉庫

Maven倉庫用來存放Maven管理的所有Jar包。分為:本地倉庫local和中央倉庫central。

本地倉庫:Maven本地庫的Jar包倉庫。

中央倉庫:Maven官方提供的遠端倉庫。

當專案編譯時,Maven首先從本地倉庫中尋找專案所需的Jar包,若本地倉庫沒有,再到Maven的中央倉庫下載所需Jar包到本地倉庫。

3)maven座標

座標是Jar包的唯一標識,Maven通過座標在倉庫中找到專案所需的Jar包。

groupId:定義當前maven專案屬於哪個專案

artifactId:定義實際專案中的某一個模組

version:定義當前專案的當前版本

packaging:定義當前專案的打包方式

4)依賴管理

依賴分為傳遞依賴、排除依賴,還有依賴衝突解決

  • 傳遞依賴:如果專案引用了一個Jar包,而該Jar包又引用了其他Jar包,那麼在預設情況下專案編譯時,Maven會把直接引用和間接引用的Jar包都下載到本地。
  • 排除依賴:如果我們只想下載直接引用的Jar包,那麼需要在pom.xml將需要排除的Jar包的座標寫在中。
  • 依賴衝突:若專案中多個Jar同時引用了相同的Jar時,會產生依賴衝突,但Maven採用了最短路徑優先和宣告優先兩種避免衝突的策略,因此在Maven中是不存在依賴衝突的。

5)聚合與繼承

  • 聚合:多個專案或者模組聚合到一起,建立一個package方式為pom的專案parent專門負責聚合工作,並使用modules-module指定子模組。
  • 繼承:多個模組聚合時,子模組需要繼承父模組以消除重複。

4.Maven專案結構的幾種構建方式

1)手動建立maven目錄

安裝Maven專案目錄約定手動建立各個資料夾即可,一般不會使用這種方式;

2)命令列maven命令自動建立maven專案

本地磁碟建立一個空目錄C:/maven/hello,命令列進入到hello目錄,執行下面的命令

mvn archetype:generate-DgroupId=com.cloud.hellomaven -DartifactId=hellomaven-service -Dversion=1.0.0-SNAPSHOT-Dpackage=com.cloud.service

執行成功的話會自動在hello中建立符合maven專案約定的目錄結構。

說明:

archetype:generate:生成maven專案骨架

-DgroupId指定maven座標的groupId

- DartifactId指定maven座標的artifactId

- Dversion指定maven座標的version

- Dpackage指定maven專案的src下的包名

自動建立的maven專案結構如下

3)Eclipse IDE建立maven專案

Eclipse提供了一個很好的外掛m2eclipse無縫將Maven和Eclipse整合在一起,配置外掛選擇本地maven目錄和配置檔案setting.xml即可。

點選Eclipse選單欄File->New->Ohter->Maven,選擇Maven Project,一路預設Next,有一步需要填寫GroupId、Artifact Id、Version、選擇打包方式Package(jar、war、pom),選擇編譯環境即可

完成後目錄結構如下

4)Idea IDE建立maven專案

Idea IDE是一款很不錯的開發Maven專案的IDE,建立一個mavenweb專案的過程如下:

選擇File-New-Project,選擇Maven,勾選Create from archetype,選擇maven-archetype-webapp,

點選Next,填寫Group Id、Artifact Id、Version三項

點選Next,選擇Maven home,選擇setting file

點選Next,填寫Project name,選擇專案路徑即可

Finish完成maven web專案建立

5.Pom檔案說明

<projectxmlns="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>
   <!-- 子模組對父模組的繼承,繼承父模組的所有依賴-->
  
<parent>
      <groupId></groupId>
      <artifactId></artifactId>
      <version></version>
   </parent>
   <!-- 指定多個模組一起進行編譯-->
  
<modules>
      <module></module>
   </modules>

   <!--groupId 反寫的公司網站+專案名稱 -->
  
<groupId>com.demo.ssm</groupId>
   <!--artifactId 專案名稱+模組名稱 -->
  
<artifactId>demo-ssm</artifactId>
   <!--第一個0表示大版本號
         
第二個0表示分支版本號
           
第三個0表示小版本號 0.0.1
        snapshot
快照 alpha內部測試 beta公測
        Release
穩定版本 GA正式釋出
   
-->
  
<version>0.0.1-SNAPSHOT</version>
   <!-- 預設是jar可以是war jar pom -->
  
<packaging>jar</packaging>
   <!--專案描述名稱-->
  
<name>demo-ssm</name>
   <!--專案地址-->
  
<url>www.gseem.com</url>
   <!--專案描述-->
  
<description>這是專案描述</description>
   <!--開發者列表-->
  
<developers>feiyue</developers>
   <!--專案許可證-->
  
<licenses></licenses>
   <!--專案組織資訊-->
  
<organization></organization>
   <!--專案屬性-->
  
<properties>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
   </properties>
  
   <!--專案依賴列表-->
  
<dependencies>
      <dependency>
         <groupId>junit</groupId>
         <artifactId>junit</artifactId>
         <version>4.9</version>
         <type></type>
         <!-- 作用範圍 -->
        
<scope>test</scope>
         <!-- 設定依賴是否可選-->
        
<optional></optional>
         <!-- 排除依賴傳遞列表-->
        
<exclusions>
            <exclusion></exclusion>
         </exclusions>
      </dependency>
      <dependency>
         <groupId>com.demo.maven</groupId>
         <artifactId>demo.maven</artifactId>
         <version>0.0.1-SNAPSHOT</version>
      </dependency>
   </dependencies>

   <!-- 依賴的管理 -->
  
<dependencyManagement>
      <dependencies>
         <dependency></dependency>
      </dependencies>
   </dependencyManagement>

   <build>
      <!-- 外掛列表 -->
     
<plugins>
         <plugin>
            <groupId></groupId>
            <artifactId></artifactId>
            <version></version>
         </plugin>
      </plugins>
   </build>

</project>

歡迎大家關注博主訂閱號“Java技術日誌”,提供Java相關技術分享,從Java程式設計基礎到Java高階技術,從JavaWeb技術基礎Jsp、Servlet、JDBC到SSH、SSM開發框架,從REST風格介面設計到分散式專案實戰。剖析主流開源技術框架,用親身實踐來譜寫深度Java技術日誌。


Java技術日誌