Maven介紹css
安裝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 文件中,包括項目的類型、名字,管理依賴關係,定製插件的行爲等等。
在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整合了各類插件, 如Jar,Compiler,Surefire等。Jar 用來創建Jar文件, Compiler 插件用來編譯源代碼和單元測試代碼。Surefire 插件運行單元測試。
編譯後 的 classes 會放在 ${basedir}/target/classes 下面, JAR 文件會放在 ${basedir}/target 下面, test類 class 文件放在 target/test-classes/ 目錄下面
maven 項目在默認狀況下會產生 JAR 文件
生命週期指項目的構建過程,它包含了一系列的有序的階段 (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
在 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 默認的遠程庫(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>
---