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