最近,開發(fā)中要用到maven,所以對maven進(jìn)行了簡單的學(xué)習(xí)。因?yàn)橛袀€(gè)maven高手在身邊,所以,很快就上手了,我這里算是自我總結(jié)吧。關(guān)于maven是什么東東,請參考其它文章。
----------------準(zhǔn)備工作-------------
Jdk 1.5以上java開發(fā)環(huán)境。
Eclipse IDE 一個(gè)。
Maven 3.0.3下載地址: http://maven.apache.org/docs/3.0.3/release-notes.html
第一步:配置maven環(huán)境
將下載文件解壓,然后設(shè)置maven環(huán)境
如果你配置過jdk的話,這里對你應(yīng)該不難。如我的maven環(huán)境為:F:\maven\apache-maven-3.0.3
我的電腦-----屬性----高級-----環(huán)境變量-----環(huán)境變量-----新建
變量名:M2_HOME
變量值:F:\maven\apache-maven-3.0.3
找到path
在環(huán)境變量值尾部加入:;%M2_HOME%\bin;---前面注意分號
當(dāng)然,你也可以直接在path 路徑下加入:;F:\maven\apache-maven-3.0.3\bin 只是上面的方式更優(yōu)雅一點(diǎn)。
我新建立
打開命令提示符(開始---運(yùn)行---cmd),檢查我們的java環(huán)境和maven環(huán)境是否有誤。

第二步:修改倉庫位置
修改我們倉庫地址,倉庫用于存放我們項(xiàng)目所依賴的所有jar包。
我的倉庫路徑:F:\maven\repo----這個(gè)路徑是我自己創(chuàng)建,你可以將路徑創(chuàng)建在任何位置。
我們打開…\apache-maven-3.0.3\conf\目錄下的setting.xml文件,設(shè)置成我們創(chuàng)建的倉庫路徑

下面我們用一個(gè)命令驗(yàn)證一下。打開命令提示符,輸入:mvn help:system
該命令會(huì)打印出所有的java系統(tǒng)屬性和環(huán)境變量。這些信息對我們?nèi)粘5木幊坦ぷ骱苡袔颓摇?/span>
如果運(yùn)行的過程中沒有錯(cuò)誤,打開我們倉庫(F:\maven\repo)會(huì)發(fā)現(xiàn)里面多了一些文件。這些文件就是我們從maven的中央倉庫下載到本地倉庫的。
第三步:創(chuàng)建maven項(xiàng)目
創(chuàng)建一個(gè)我們自己的項(xiàng)目。
我們通過maven命令行方式創(chuàng)建一個(gè)項(xiàng)目

mvn archetype:create -DgroupId=com.chongshi.test -DartifactId=hello -DpackageName=com.chongshi.test -Dversion=1.0
因?yàn)槭堑谝淮螛?gòu)建項(xiàng)目,所有依賴的jar包都要從maven的中央倉庫下載,所以需要時(shí)間等待。等以后我們的本地倉庫中積累了我們常用的jar包后,我們的開發(fā)將變得非常規(guī)范和方便。^_^!!
借助下載jar包的時(shí)間,我們來了解一下pom.xml文件。
<project 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">
<modelVersion>4.0.0</modelVersion>
<groupId>com.chongshi.test</groupId>
<artifactId>hello</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<name>hello</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
Ø project:pom.xml文件中的頂層元素;
Ø modelVersion:指明POM使用的對象模型的版本。這個(gè)值很少改動(dòng)。
Ø groupId:指明創(chuàng)建項(xiàng)目的組織或者小組的唯一標(biāo)識(shí)。GroupId是項(xiàng)目的關(guān)鍵標(biāo)識(shí),典型的,此標(biāo)識(shí)以組織的完全限定名來定義。比如,org.apache.maven.plugins是所有Maven插件項(xiàng)目指定的groupId。
Ø artifactId: 指明此項(xiàng)目產(chǎn)生的主要產(chǎn)品的基本名稱。項(xiàng)目的主要產(chǎn)品通常為一個(gè)JAR文件。第二,象源代碼包通常使用artifactId作為最后名稱的一部分。典型的 產(chǎn)品名稱使用這個(gè)格式: <artifactId>- <version>. <extension>(比 如:myapp-1.0.jar)。
Ø version:項(xiàng)目產(chǎn)品的版本號。Maven幫助你管理版本,可以經(jīng)??吹絊NAPSHOT這個(gè)版本,表明項(xiàng)目處于開發(fā)階段。
Ø name:項(xiàng)目的顯示名稱,通常用于maven產(chǎn)生的文檔中。
Ø url:指定項(xiàng)目站點(diǎn),通常用于maven產(chǎn)生的文檔中。
Ø description:描述此項(xiàng)目,通常用于maven產(chǎn)生的文檔中。
對于一個(gè)項(xiàng)目中只有下面的一部分是是我們需要關(guān)注的:
<groupId>com.chongshi.test</groupId>
<artifactId>hello</artifactId>
<version>1.0</version>
第四步:編譯項(xiàng)目代碼
我們的項(xiàng)目已經(jīng)創(chuàng)建完成。但我們點(diǎn)開目錄發(fā)現(xiàn),它并不是我們eclipse所需要的項(xiàng)目目錄格式。我們需要把它構(gòu)建成我們eclipse可以導(dǎo)入的項(xiàng)目。
在命令提示符下進(jìn)入到我們的創(chuàng)建的項(xiàng)目目錄(F:\maven\hello)下,執(zhí)行:mvn clean compile

Clean 告訴maven清理輸入出目錄target/,compile告訴maven編譯項(xiàng)目主代碼。
不要急,我們又需要一段時(shí)間來下載,相關(guān)jar包。^_^!第一次用maven要學(xué)會(huì)淡定。
項(xiàng)目是編譯完了,但項(xiàng)目的目錄結(jié)構(gòu)還不是我們想要的eclipse的項(xiàng)目結(jié)構(gòu),是不能導(dǎo)入到eclipse中的。所以,還需要執(zhí)行一個(gè)命令:mvn eclipse:eclipse
命令執(zhí)行完成后就得我們需要的項(xiàng)目目錄了。
第五步:導(dǎo)入eclipse工具
打開的我們的eclipse工具。
先配置maven倉庫路徑
Window----Perferences-----java-----Build Path-----Classpath Variables
New一個(gè)變量的類路徑。

Name :M2_REPO 注意這個(gè)名字必須要大寫。
Path :F:/maven/repo 點(diǎn)擊“Folder…”找到有本地倉庫的位置。
下面,可以導(dǎo)入我的hello項(xiàng)目了。Eclipse如何導(dǎo)入項(xiàng)目,我這里就不說了,如果你是個(gè)java開發(fā)人員的話。
第六步:包的更新與下載
打開項(xiàng)目發(fā)現(xiàn)我們junit 是3.8.1的,有點(diǎn)老了。那我想換成4.7的,如何通過maven的方式更換呢。其實(shí),很簡單,打開我們項(xiàng)目下的的pom.xml文件。
……
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
……
更改變,junit的版本號,然后重新執(zhí)行:mvn eclipse:eclipse
Maven 中央倉庫地址:http://search.maven.org
假如,我們想下載一個(gè)struts 的jar包。在搜索框內(nèi)搜索strruts ,會(huì)要列出中央倉庫中的所有struts版本。
列表的格式與我們pom.xml配置文件的格式是對應(yīng)的。

我們在pom.xml中加入:
<groupId>stuts</groupId>
<artifactId>struts-scription</artifactId>
<version>1.0.1</version>
然后更新項(xiàng)目就可從中央倉庫下載我們想要的任意jar包(必須是開源的包)
繼續(xù)學(xué)習(xí)內(nèi)容:
1. 如何創(chuàng)建一個(gè)web項(xiàng)目?
如果想讓maven應(yīng)用到項(xiàng)目開發(fā)中,這個(gè)是必須的。
2. 如何使用jeety?
maven提供的一個(gè)容器,類似于tomcat
3. 如何創(chuàng)建一個(gè)代理倉庫?
http://www.theserverside.com/news/1364121/Setting-Up-a-Maven-Repository
一個(gè)團(tuán)隊(duì)要真正用好Maven,repository私服是免不了的,否則team mate們多好奇的目光,都會(huì)全部消耗在漫長的jar下載中。
以前介紹過一個(gè)搭建私服的簡樸但很笨的辦法--將雷鋒同志下載好的.m2/repository目錄整個(gè)上傳到任意的Web服務(wù)器中。其實(shí)世上多的是專業(yè)的maven私服搭建器,見TheServiceSide的文章--Setting Up a Maven Repository。
我用的是Artifactory,忽然間覺得,Java的服務(wù)應(yīng)用啥時(shí)候終于變得這么好用了,什么都不用裝,不用配,雙擊artifactory.bat,自己就會(huì)啟動(dòng)Jetty Web服務(wù)器,典型的拆箱即用。
10分鐘入門到開動(dòng)
- 雙擊artifactory.bat,啟動(dòng)默認(rèn)配置的Artifactory服務(wù)。
- http://localhost:8081/artifactory/,用admin/password登錄進(jìn)管理界面看看。
- 修改自己項(xiàng)目的pom.xml,增加私服定義
<repositories>
<repository>
<id>artifactory</id>
<name>your local artifactory</name>
<url>http://localhost:8081/artifactory/repo</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>artifactory</id>
<name>your local artifactory</name>
<url>http://localhost:8081/artifactory/plugins-releases</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
- 正常運(yùn)行項(xiàng)目的maven命令,向artifactory索求jar。如果artifactory已經(jīng)下載了就會(huì)直接返回給你,還沒有的 就會(huì)去那幾個(gè)repo官方站下載。進(jìn)入到artifactory的管理界面,不斷刷新Browse the repository,會(huì)看到倉庫不斷豐富的情況。
另外,官網(wǎng)服務(wù)器上還沒有的一些jar,也可以通過管理界面很方便的deploy到Artifactory中。
最后你團(tuán)隊(duì)里的artifactory服務(wù)器不能直接連外網(wǎng),需要使用HTTP代理服務(wù)器的話,見http://www.jfrog.org/sites/artifactory/latest/configuration.html
建議那些愿意為開源作實(shí)事的站點(diǎn),在帶寬充裕的服務(wù)器上,用Artifactory搭一個(gè)jar倉庫吧,SpringSide就可以直接連上去下載jar了:)
如果是團(tuán)隊(duì)開發(fā),這個(gè)很有必要,我們不可能每次都到中央倉庫拿包,那樣很慢,如果開發(fā)人員A已經(jīng)下了某包,開發(fā)人員B還要下;創(chuàng)建代理倉庫,A第一次下的包會(huì)存入代理倉庫中,B要用時(shí)直接從代理倉庫取就行。
本文更新一個(gè)命令。
第一節(jié)中提示創(chuàng)建一個(gè)項(xiàng)目用archetype:create create是個(gè)被廢棄或不被推薦使用的插件,在以后創(chuàng)建項(xiàng)目中請盡量使用archetype:generate
創(chuàng)建一個(gè)項(xiàng)目,如下:
mvn archetype:generate -DgroupId=com.chongshi.test -DartifactId=hello
-DpackageName=com.chongshi.test -Dversion=1.0
第一節(jié)拋出了三個(gè)問題,本文將解決前兩個(gè)
1. 如何創(chuàng)建一個(gè)web項(xiàng)目
2. 如何使用jettey容器運(yùn)行
如果對maven的基本配置不了解的,請先閱讀第一篇文章:
http://www.cnblogs.com/fnng/archive/2011/12/02/2272610.html
-----//創(chuàng)建一個(gè)文本項(xiàng)目
1. 如何創(chuàng)建一個(gè)web項(xiàng)目。
其實(shí)非常簡單,只是比普通項(xiàng)目多加一個(gè)參數(shù)DarchetypeArtifactId ,命令如下:
mvn archetype:generate -DgroupId=com.chongshi.test -DartifactId=mywebapps -DarchetypeArtifactId=maven-archetype-webapp -Dversion=1.0
定位到創(chuàng)建項(xiàng)目的目錄下構(gòu)建成eclipse項(xiàng)目:
F:\mywebapp>mvn eclipse:eclipse
通過maven構(gòu)建后就是我們eclipse所需要的項(xiàng)目目錄如下。

由于本文不是講解struts2項(xiàng)目的創(chuàng)建與配置,所以就不寫struts2的配置過程,但為了不影響后面內(nèi)容的講解,所以這里提供一個(gè)基于struts2的web項(xiàng)目
例子介紹:http://www.mkyong.com/struts2/struts-2-hello-world-example/
項(xiàng)目源碼下載:
http://www.mkyong.com/wp-content/uploads/2010/08/Struts2-Hello-World-Example.zip
我解壓到了本地D盤根目錄下,由于已經(jīng)是maven 的項(xiàng)目格式了,所以不需要對該項(xiàng)目運(yùn)行mvn eclipse:eclipse命令進(jìn)行構(gòu)建。直接導(dǎo)入到eclipse工具中。項(xiàng)目目錄結(jié)構(gòu)如下:

2. 如何使用jetty容器運(yùn)行項(xiàng)目。
使用添加jetty 運(yùn)行項(xiàng)目。
Jetty和tomcat一樣也屬于web容器。Jetty做maven中做為一個(gè)插件。我們要在pom.xml中添加jetty的插件,才能調(diào)用jetty。
在<project>…</project>標(biāo)簽之間,插入如下信息:
<build>
<finalName>Struts2Example</finalName>
<plugins>
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
<version>6.1.10</version>
<configuration>
<scanIntervalSeconds>10</scanIntervalSeconds>
<stopKey>foo</stopKey>
<stopPort>9999</stopPort>
</configuration>
<executions>
<execution>
<id>start-jetty</id>
<phase>pre-integration-test</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<scanIntervalSeconds>0</scanIntervalSeconds>
<daemon>true</daemon>
</configuration>
</execution>
<execution>
<id>stop-jetty</id>
<phase>post-integration-test</phase>
<goals>
<goal>stop</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
在項(xiàng)目目錄下執(zhí)行mvn jetty:jetty
D:\java\Administrator\workspace3\Struts2Example>mvn jetty:jetty
在慢長的等待插件下載過程中(公司網(wǎng)速不給力),我上了一次廁所、倒了一次水。在群里和朋友亂侃了一通。^_^!!
等插件下載完成后就可以運(yùn)行jetty了,運(yùn)行命令:mvn jetty:run
這時(shí)就可以在瀏覽器中訪問我們的jsp頁面了。

重啟Jetty,按鍵盤ctrl+c 根據(jù)提示按 y
