Posted on 2007-07-20 22:27
Matthew Chen 閱讀(359)
評(píng)論(0) 編輯 收藏 所屬分類:
Build Project
淺嘗MAVEN- -
最近老大要求我們把一個(gè)項(xiàng)目從ANT移植到maven,我就把我學(xué)習(xí)的過程以及把遇到的問題簡(jiǎn)單的敘述一下。(由于本人也是剛用MAVEN,很多東西做的不好)。
一,安裝及簡(jiǎn)單配置
1.我用的是1.1beta1(版本的不同可能會(huì)導(dǎo)致一些問題)。
下載地址:http://maven.apache.org/start/download.html
2.環(huán)境變量
加MAVEN_HOME,并將%MAVEN_HOME%\bin加入PATH變量中
3.檢查是否安裝成功
只要在命令提示行中打入:maven
-v。如出現(xiàn)版本信息則說明安裝正確。
4.配置local repository和remote repository
為了讓所有的工程共享這個(gè)配置,可以在你的USER_HOME(即documents and
settings\用戶名\)下建立一個(gè)build.properties文件。
maven.repo.local=D:/Maven
1.0.2/local/repository
maven.repo.remote=http://192.168.82.217/repo(可選)
在這里我的remote
repo是自己建的,默認(rèn)的是ibiblio.org,關(guān)于remote.repo的其他站點(diǎn)可以參照網(wǎng)上其他blog。
如果你需要代理則要加上:
maven.proxy.host=
maven.proxy.port=
maven.proxy.username=
maven.proxy.password=
假如使用以上方法仍不能連接,那只有自己建了。(最近公司換域,就是用代理都上不去-_-#!)
建remote.repo很容易,只需要參照http://www.ibiblio.org/maven/上的目錄結(jié)構(gòu),建立相應(yīng)的站點(diǎn)。只不過包要自己去 http://www.ibiblio.org/maven/上手動(dòng)下載。哎~
真是慘啊。
二,maven的簡(jiǎn)單運(yùn)用
用maven -h 可以查看一些簡(jiǎn)單的命令,用maven
-g查看現(xiàn)有的插件及Goal(類似ant中的target)。
1.用maven genapp 創(chuàng)建一個(gè)application (插件信息包括goals和properties可以查看http://maven.apache.org/)
會(huì)在命令行的當(dāng)前目錄中建立。
maven
genapp
接下來會(huì)讓你選擇一個(gè)模版(插件信息里有) [default]
指定一個(gè)project id(似乎在生成的文檔中用到)
[test]
指定一個(gè)name [test]
接著是指定package [maven.ex]
project.xml對(duì)該工程作了詳細(xì)描述
請(qǐng)參照:http://www.zahui.com/html/6/36570.htm
2.用java:compile編譯剛剛建立的工程
可以看到多了一個(gè)target目錄,用于存放編譯后的class文件和其他產(chǎn)生物。
3.test:test
由于剛剛的工程存在測(cè)試類,所以可用這個(gè)goal來進(jìn)行測(cè)試。 在target目錄又多了一個(gè)test-classes和一個(gè)test-reports,相信一看名字就明白了。
4.dist:build
會(huì)自動(dòng)完成一系列的任務(wù),其中有任務(wù)會(huì)在target目錄生成很詳細(xì)的文檔,target\projectname-1.0\bin\projectname-1.0\下可以找到完整的html文檔。
5.eclipse
使用該Goal可以生成一個(gè)eclipse工程,直接在eclipse中導(dǎo)入就可以了。其中classpath是根據(jù)project.xml中定義的dependency,需要在eclipse:java-build
path -classpath variable中加一個(gè)MAVEN_REPO的變量,指向你的local repo.
三,自定義goal
由于maven完全支持ant語(yǔ)法,對(duì)于ant的用戶將更為熟悉。
要自定義goal,需要在工程目錄下建一個(gè)maven.xml文件。
比如:
<goal name="project:deploy">
<copy
todir="${tomcat.webapps}/app">
<fileset
dir="${webroot}"/>
</copy>
</goal>
只不過target變成了goal而已
preGoal:在指定的goal之前執(zhí)行相應(yīng)的goal
比如:
<preGoal
name="goal1">可以是自定義的也可以是插件自帶的
<attainGoal
name="goal2"/>
……
<attainGoal
name="……"/>
</preGoal>
即為在執(zhí)行g(shù)oal1之前,執(zhí)行g(shù)oal2
postGoal:在指定的goal之后...
四,使用maven的scm插件,連接cvs服務(wù)器
在project.xml中的 節(jié)點(diǎn)指定了cvsroot,cvsroot的格式是固定的,如果服務(wù)器用低版本的cvsnt,建立的cvsroot是有絕對(duì)路徑的,比如:
scm:cvs:pserver:user:123456@192.168.82.217:E:/CVS/app
會(huì)被認(rèn)為是不正確的。而且密碼也不在里面給出(該插件似乎有username,password的屬性,可在properties文件中給出,不過我嘗試了沒用,或許我用錯(cuò)了,也可能因?yàn)槭莃eta版,在1.0.2的版本中是沒有這個(gè)屬性的)。
高版本的cvsnt才有虛擬路徑,在maven中這樣的路徑才被認(rèn)為是正確的:
scm:cvs:pserver:user@192.168.82.217:/cvs:app
這樣要checkout的話必須先得登陸cvs。
這個(gè)插件在開發(fā)中一般是不會(huì)使用到的,由于我們要用cruisecontrol+maven實(shí)現(xiàn)daily
build所以才會(huì)用到。 如果你需要使用這個(gè)插件,你會(huì)發(fā)現(xiàn)你在用checkout-project的時(shí)候,還會(huì)遇到一些問題。
五,在eclipse中使用mevenide插件。
通過eclipse的help->software updates
->find and install->search for new features->new remote site
加入插件地址:http://mevenide.codehaus.org/release/eclipse/update/site.xml
選擇需要的版本下載,重啟工作臺(tái)后即可以使用了,使用和配置比較簡(jiǎn)單。
不過可能會(huì)遇到找不到org.apache.xerces.jaxp.SAXParserFactoryImpl的問題,是因?yàn)樵贛AVEN_HOME\lib下缺少一個(gè)目錄,下載一個(gè)1.0.2的版本就知道缺少什么文件了。不直接用1.0.2的原因是因?yàn)?.0.2在test:test的時(shí)候可能會(huì)發(fā)生有些class找不到的情況,解決的方法沒有前者的快些。
還有個(gè)問題,上次有人問我怎樣一下子把project.xml中dependency的jar加到eclipse的classpath中,想到elipse的maven
workshop插件,但使用起來也不是很好,在用overwrite classpath with POM時(shí)出錯(cuò),也得用add dependency to
classpath(此方法根據(jù)配置中的local
repo,讓你選擇所需的jar包和version,在向project.xml中添加dependency時(shí)有用)一個(gè)一個(gè)加。其實(shí)可以用剛剛提到的maven
eclipse來重新生成eclipse工程,它會(huì)把project.xml中的dependency自動(dòng)加到eclipse插件里。