Maven入門教程
1.1.介紹、環境配置
1.1.1.Maven介紹
Maven是一個采用純Java編寫的開源項目管理工具, Maven采用了一種被稱之為Project Object Model (POM)概念來管理項目,所有的項目配置信息都被定義在一個叫做POM.xml的文件中,通過該文件Maven可以管理項目的整個生命周期,包括清除、編譯,測試,報告、打包、部署等等。目前Apache下絕大多數項目都已經采用Maven進行管理.而Maven本身還支持多種插件,可以方便更靈活的控制項目,開發人員的主要任務應該是關注商業邏輯并去實現它,而不是把時間浪費在學習如何在不同的環境中去依賴jar包,項目部署等。Maven正是為了將開發人員從這些任務中解脫出來而誕生的
1.1.2.Maven能夠做什么
lJar的聲明式依賴性管理
l項目自動構建
1.1.3.環境配置
lhttp://maven.apache.org/download.html下載最新版本Maven3.0.2(Binaryzip)
l解壓到D(本身就是綠色版不需要安裝):
l配置環境變量(配置之前,必須確定配置了JDK環境變量)
MAVEN_HOME : D:\apache-maven-3.0.2
把此命令添加到Path中:%MAVEN_HOME%\bin\
l配置用戶范圍的settings.xml
MAVEN_HOME/conf/settings.xml全局的
~/.m2/settings.xml單個用戶的
l驗證安裝是否成功
在命令行上輸入: mvn
-version;回車,如看到下面信息表示安裝成功
1.1.4.Maven目錄分析
lbin:含有mvn運行的腳本
lboot:含有plexus-classworlds類加載器框架
lconf:含有settings.xml配置文件
llib:含有Maven運行時所需要的java類庫
lSettings.xml中默認的用戶庫:
${user.home}/.m2/repository[A1]
lMaven默認倉庫下載地址在: maven的lib目錄下maven-model-builder-3.0.4.jar的pom.xml中
1.2.第一個Maven演示
1.2.1.創建目錄結構
Convention Over
Configuration (約定優于配置)。在現實生活中,有很多常識性的東西,地球人都知道。比如說:如何過馬路(紅燈停綠燈行),如何開門,關門等。對于這些事情,人們已經有了默認的約定,在軟件開發過程中,道理也是類似的,如果我們事先約定好所有項目的目錄結構,標準開發過程(編譯,測試) ,所有人都遵循這個約定。軟件項目的管理就會變得簡單很多。在現在流行的很多框架中,都使用了這個概念
Hello
--src
-----main
----------java--用來存放Java文件
----------resources--用來存放資源文件
-----test
---------java--用來存放測試的Java文件
---------resources
--target--項目輸出位置,編譯完畢后自動生成
--pom.xml--項目對象模型的描述,它是maven配置的核心
1.2.2.建立pom.xml
"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">
4.0.0
cn.itcast.maven
Hello
0.0.1-SNAPSHOT
junit
junit
4.9
test
pom.xml文件是maven對一個項目的核心配置,這個文件將包含你希望如何構建項目的大多數配置信息。POM大而復雜,但你不用全部去了解,只要使用一些常用的配置就可以了
1.2.3.創建Java類與測試類
l在src/main/java/cn/itcast/maven目錄下新建文件Hello.java
packagecn.itcast.maven;
publicclassHello {
publicString sayHello(String
name){
return"Hello "+name+"!";
}
}
l在/src/test/java/cn/itcast/maven目錄下新建測試文件HelloTest.java
package cn.itcast.maven;
import org.junit.Test;
import static junit.framework.Assert.*;
public class HelloTest {
@Test
public? void testHello(){
Hello? hello = new Hello();
String? results = hello.sayHello("litingwei");
assertEquals("Hello? litingwei!",results);
}
}
1.2.4.命令測試
打開cmd命令行,進入Hello項目根目錄執行mvn compile命令,查看根目錄變化
cmd中繼續錄入mvn clean命令,然后再次查看根目錄變化
cmd中錄入mvn clean compile命令,查看根目錄變化
cmd中錄入mvn clean test命令,查看根目錄變化
cmd中錄入mvn clean package命令,查看根目錄變化
1.3.Maven核心概念
1.3.1.Maven插件
Maven的核心僅僅定義了抽象的生命周期,具體的任務都是交由插件完成的每個插件都能實現多個功能,每個功能就是一個插件目標
Maven的生命周期與插件目標相互綁定,以完成某個具體的構建任務, Maven的插件在:.m2\repository\org\apache\maven\plugins
1.3.2.Maven坐標
類似在平面幾何中坐標(x,y)可以標識平面中唯一的一點,
Maven世界擁有大量構建,我們需要找一個用來唯一標識一個構建的統一規范
擁有了統一規范,就可以把查找工作交給機器
lgroupId:定義當前Maven項目隸屬項目(實際對應JAVA的包的結構,是main目錄里java的目錄結構)
lartifactId:定義實際項目中的一個模塊(項目的唯一的標識符,實際對應項目的名稱,就是項目根目錄的名稱)
lversion:定義當前項目的當前版本
1.3.3.Maven倉庫
l何為Maven倉庫:用來統一存儲所有Maven共享構建的位置就是倉庫
lMaven配置jar包的路徑為:groupId/artifactId/version/artifactId-version
l本地倉庫(~/.m2/repository/):每個用戶只有一個本地倉庫
l中央倉庫(Maven默認的遠程倉庫):Maven默認的遠程倉庫下載地址為:http://repo1.maven.org/maven2
l私服:是一種特殊的遠程倉庫,它是架設在局域網內的倉庫,主要是為了團隊協作開發
l鏡像:用來替代中央倉庫,速度一般比中央倉庫快
1.3.4.生命周期
1.4.第二個Maven演示
1.4.1.HelloFriend目錄結構
HelloFriend
--src
-----main
----------java
----------resources
-----test
---------java
---------resources
--pom.xml
1.4.2.建立Pom.xml
xmlns="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.0http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
cn.itcast.maven
HelloFriend
1.0.0
jar
junit
junit
4.9
test
cn.itcast.maven
Hello
1.0.0
compile
1.4.3.創建Java類與測試類
l在src/main/java/cn/itcast/maven目錄下新建文件HelloFriend.java
packagecn.itcast.maven;
publicclassHelloFriend{
publicString sayHello(String
name){
return"Hello "+name+"!";
}
}
l在/src/test/java/cn/itcast/maven目錄下新建測試文件HelloFriendTest.java
packagecn.itcast.maven;
importorg.junit.Test;
importcn.itcast.maven.Hello;
publicclassHelloFriendTest{
@Test
publicvoidtesHelloFriend(){
HelloFriendhelloFriend =newHelloFriend();
String results = helloFriend.sayHelloToFriend("litingwei");
System.out.println(results);
}
}
1.4.4.命令測試
l在HelloFriend目錄下執行mvn clean mvn compile mvn test都正常
l在HelloFriend目錄下執行命令mvn
package系統報錯說沒有找到依賴,因為HelloFriend依賴Hello模塊,但是此模塊在個人倉庫和中央倉庫中并不存在
l需要重新構建Hello第一個項目并安裝到數據倉庫,在Hello根目錄下執行mvn clean install,就會部署的中央倉庫中
1.5.Maven與Eclipse整合
1.5.1.配置maven插件
1.5.2.user settings
1.6.Maven部署到Tomcat中
1.6.1.創建Java項目
l在MyEclipse創建項目的時候選擇Maven Project
l在構件向導的時候選擇quickstart注意,此向導也是插件,第一次使用的時候.也要從遠程倉庫中下載相應的jar包,因此需要網絡環境
l設置當前模塊的坐標,和相應的版本號
l創建完畢后默認生成的項目包目錄如下
l通過在pom.xml中配置相應Hello.jar即可
"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.0http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
Hello3
Hello3
0.0.1-SNAPSHOT
jar
Hello3
http://maven.apache.org
UTF-8
junit
junit
4.9
test
cn.itcast.maven
Hello
0.0.1-SNAPSHOT
compile
l通過在pom.xml中單擊右鍵選擇相應的命令即可
1.6.2.創建Web項目
l選擇創建一個普通的web工程
l設置相應的坐標
l如果采用src缺省的包結構,則pom.xm中需要指定編譯和調試的目錄.
xmlns="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">
4.0.0
web
web
0.0.1-SNAPSHOT
war
UTF-8
1.2
1.6
javax.servlet
jstl
${jstl.version}
provided
javax.servlet.jsp
jsp-api
2.1
provided
cn.itcast.maven
Hello
0.0.1-SNAPSHOT
compile
${basedir}/src
${basedir}/WebRoot/WEB-INF/classes
${basedir}/src
**/*.java
maven-war-plugin
${basedir}/WebRoot
${basedir}/WebRoot
maven-compiler-plugin
${compiler.version}
${compiler.version}
l在index.jsp頁面中添加如下代碼
<%//要導入相應: cn.itcast.maven.*
Hello? hello=newHello();
out.println(hello.sayHello("admin"));
%>
通過maven下載的jar包都會存儲到指定的個人倉庫中