Maven安裝配置使用

Maven介紹css

Maven是一個項目管理工具,它包含了一個項目對象模型 (Project Object Model),一組標準集合,一個項目生命週期(Project Lifecycle),一個依賴管理系統(Dependency Management System),和用來運行定義在生命週期階段(phase)中插件(plugin)目標(goal)的邏輯。當你使用Maven的時候,你用一個明肯定義的項目對象模型來描述你的項目,而後Maven能夠應用橫切的邏輯,這些邏輯來自一組共享的(或者自定義的)插件。
Maven 有一個生命週期,當你運行 mvn install 的時候被調用。這條命令告訴 Maven 執行一系列的有序的步驟,直到到達你指定的生命週期。遍歷生命週期旅途中的一個影響就是,Maven 運行了許多默認的插件目標,這些目標完成了像編譯和建立一個 JAR 文件這樣的工做。此外,Maven可以很方便的幫你管理項目報告,生成站點,管理JAR文件。

 

安裝html

1.下載: http://maven.apache.org/download.cgijava

2.安裝: web

zip:  $unzip apache-maven-3.3.9-bin.zipapache

tar:  $tar xzvf apache-maven-3.3.9-bin.tar.gz服務器

3.添加PATH:oracle

在 /etc/paths 中加入: maven中的bin/app

或執行  $export PATH=~/dev/tools/apache-maven-3.3.9/bin:$PATHwebapp

4.驗證: $mvn -vmaven

 

IntelliJ IDEA集成

安裝maven插件 詳細 https://www.jetbrains.com/help/idea/2016.2/maven.html

 

基本概念

maven項目的默認目錄結構:

目錄

目的

${basedir}

存放 pom.xml和全部的子目錄

${basedir}/src/main/java

項目的 java源代碼

${basedir}/src/main/resources

項目的資源,好比說 property文件

${basedir}/src/test/java

項目的測試類,好比說 JUnit代碼

${basedir}/src/test/resources

測試使用的資源

-----------

POM (Project Object Model)

一個項目全部的配置都放置在 POM 文件中,包括項目的類型、名字,管理依賴關係,定製插件的行爲等等。

在POM中,groupId + artifactId + packaging + version 才稱爲項目標識,能惟一肯定一個項目, 可用來指定項目所依賴的其餘項目,插件,或者父項目。

格式通常以下:     groupId:artifactId:packaging:version      好比:     com.mycompanyname.helloworld: helloworld: jar: 1.0-SNAPSHOT

大項目通常會分紅幾個子項目。在這種狀況下,每一個子項目就會有本身的 POM 文件,而後它們會有一個共同的父項目。這樣只要構建父項目就可以構建全部的子項目了。子項目的 POM 會繼承父項目的 POM。另外,全部的 POM都繼承了一個 Super-POM。Super-POM 設置了一些默認值,好比默認的目錄結構,默認的插件等.

 

Maven 插件

maven整合了各類插件, 如Jar,Compiler,Surefire等。Jar 用來創建Jar文件, Compiler 插件用來編譯源代碼和單元測試代碼。Surefire 插件運行單元測試。

編譯後 的 classes 會放在 ${basedir}/target/classes 下面, JAR 文件會放在 ${basedir}/target 下面, test類 class 文件放在 target/test-classes/ 目錄下面

maven 項目在默認狀況下會產生 JAR 文件

 

Maven 生命週期

生命週期指項目的構建過程,它包含了一系列的有序的階段 (phase),而一個階段就是構建過程當中的一個步驟。mvn package 是一個maven的生命週期階段 (lifecycle phase)。

插件目標能夠綁定到生命週期階段上。一個生命週期階段能夠綁定多個插件目標。當 maven 在構建過程當中逐步的經過每一個階段時,會執行該階段全部的插件目標。

maven 能支持不一樣的生命週期,可是最經常使用的是默認的Maven生命週期。若是你沒有對它進行任何的插件配置或者定製的話,那麼命令 mvn package 會依次執行默認生命週期中直到包括 package 階段前的全部階段的插件目標:

process-resources 階段:resources:resources

compile 階段:compiler:compile

process-classes 階段:(默認無目標)

process-test-resources 階段:resources:testResources

test-compile 階段:compiler:testCompile

test 階段:surefire:test

prepare-package 階段:(默認無目標)

package 階段:jar:jar 

 

Maven 依賴管理

在 POM 中,依賴關係是在 dependencies 部分中定義的。好比:

<dependencies> 
    <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>3.8.1</version> 
      <scope>test</scope> 
    </dependency> 
</dependencies> 

 

由於被依賴的 jar 文件會有本身的依賴關係。那麼咱們是否是須要把那些間接依賴的 jar 文件也都定義在POM中呢?答案是不須要,由於 maven 提供了傳遞依賴的特性.

所謂傳遞依賴是指 maven 會檢查被依賴的 jar 文件,把它的依賴關係歸入最終解決的依賴關係鏈中。針對上面的 junit 依賴關係,若是你看一下 maven 的本地庫: ~/.m2/repository/junit/junit/3.8.1/ ,

發現 maven 不但下載了 junit-3.8.1.jar,還下載了它的 POM 文件。這樣 maven 就能檢查 junit 的依賴關係,把它所須要的依賴也包括進來。

在 POM 的 dependencies 部分中,scope 決定了依賴關係的適用範圍。咱們的例子中 junit 的 scope 是 test,那麼它只會在執行 compiler:testCompile and surefire:test 目標的時候纔會被加到 classpath 中,在執行 compiler:compile 目標時是拿不到 junit 的。

咱們還能夠指定 scope 爲 provided,意思是 JDK 或者容器會提供所需的jar文件。好比說在作web應用開發的時候,咱們在編譯的時候須要 servlet API jar 文件,可是在打包的時候不須要把這個 jar 文件打在 WAR 中,由於servlet容器或者應用服務器會提供的。

scope 的默認值是 compile,即任什麼時候候都會被包含在 classpath 中,在打包的時候也會被包括進去。

 

Maven 

當第一次運行 maven 命令的時候,會從 maven 默認的遠程庫(http://repo1.maven.org/maven2) 下載 maven 的核心插件和可供下載的 jar 文件。

可是不是全部的 jar 文件都是能夠從默認的遠程庫下載的,好比說咱們本身開發的項目。這個時候,有兩個選擇:要麼在公司內部設置定製庫,要麼手動下載和安裝所需的jar文件到本地庫。

本地庫是指 maven 下載了插件或者 jar 文件後存放在本地機器上的拷貝。在 Linux 上,它的位置在 ~/.m2/repository,在 Windows XP 上,在 C:\Documents and Settings\username\.m2\repository ,在 Windows 7 上,在 C:\Users\username\.m2\repository。當 maven 查找須要的 jar 文件時,它會先在本地庫中尋找,只有在找不到的狀況下,纔會去遠程庫中找。

運行下面的命令能把項目安裝到本地庫:     $mvn install

一旦一個項目被安裝到了本地庫後,其餘的項目就能夠經過 maven 座標和這個項目創建依賴關係。

好比若是我如今有一個新項目須要用到 helloworld,那麼在運行了上面的 mvn install 命令後,我就能夠以下所示來創建依賴關係:

<dependency>
      <groupId>com.mycompany.helloworld</groupId>
      <artifactId>helloworld</artifactId>
      <version>1.0-SNAPSHOT</version>
</dependency>  

依賴Jar查找:  http://search.maven.org/

 

標準目錄結構: 

src

  -main
      –bin 腳本庫
      –java java源代碼文件
      –resources 資源庫,會自動複製到classes目錄裏
      –filters 資源過濾文件
      –assembly 組件的描述配置(如何打包)
      –config 配置文件
      –webapp web應用的目錄。WEB-INF、css、js等
  -test
      –java 單元測試java源代碼文件
      –resources 測試須要用的資源庫
      –filters 測試資源過濾庫
  -site Site(一些文檔)
target
LICENSE.txt Project’s license
README.txt Project’s readme


工程根目錄下就只有src和target兩個目錄
target是有存放項目構建後的文件和目錄,jar包、war包、編譯的class文件等。

target裏的全部內容都是maven構建的時候生成的

 

使用maven構建項目

1.新建項目:

~$mvn archetype:generate -DgroupId=com.mycompany.helloworld -DartifactId=helloworld -Dpackage=com.mycompany.helloworld -Dversion=1.0-SNAPSHOT

archetype:generate 目標會列出一系列的 archetype 讓你選擇。 Archetype 能夠理解成項目的模型。 Maven 爲咱們提供了不少種的項目模型,包括從簡單的 Swing 到複雜的 Web 應用。咱們選擇默認的 maven-archetype-quickstart

maven 的 archetype 插件創建了一個 helloworld 目錄,這個名字來自 artifactId 。這個目錄下面的 pom.xml 用於描述項目,配置插件和管理依賴關係。

源代碼和資源文件放在 src/main 下面,而測試代碼和資源放在 src/test 下面。

2.構建

~$cd helloworld && mvn package 

3.運行

~$java -cp target/helloworld-1.0-SNAPSHOT.jar com.mycompany.helloworld.App

 

參考文檔:

http://maven.apache.org/configure.html

http://www.oracle.com/technetwork/cn/community/java/apache-maven-getting-started-1-406235-zhs.html

 

附:

<!-- 阿里雲倉庫 -->
        <mirror>
            <id>alimaven</id>
            <mirrorOf>central</mirrorOf>
            <name>aliyun maven</name>
            <url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
        </mirror>
    
        <!-- 中央倉庫1 -->
        <mirror>
            <id>repo1</id>
            <mirrorOf>central</mirrorOf>
            <name>Human Readable Name for this Mirror.</name>
            <url>http://repo1.maven.org/maven2/</url>
        </mirror>
    
        <!-- 中央倉庫2 -->
        <mirror>
            <id>repo2</id>
            <mirrorOf>central</mirrorOf>
            <name>Human Readable Name for this Mirror.</name>
            <url>http://repo2.maven.org/maven2/</url>
        </mirror>

---

相關文章
相關標籤/搜索