??? 看著log4j-2.13.jar被每個項目每個版本里一次又一次無限下載,你就會覺得用Maven2 管理Library實在很環保。
???? 而且,Java的類庫也急需擺脫這種無身份無地位一個jar包隨處擺放的境況。Maven給Jar以名份是一個好方向。
???? 其實Ruby和php都已有了這樣的管理工具和官方網站,所有的Ruby包在機器上都像rpm那樣是installed的。Maven既然代表了Java,但愿也能好好發展。
???? 完全使用Maven來做全部事情有點超前,因此我也只是是用它的library管理功能,真正用的深入的是pesome郁也風。
???1.? 查找Jar包在官網的路徑
??? http://www.mavenregistry.com/??,太實用了。
?? 2. 用Ant??調Maven管理 JAR
????
???SpringSide使用maven2的ant task,不需要用戶裝maven,直接用ant腳本來下載依賴包并copy到$springside_home/lib。腳本如下:
?????<classpath>
?????????????<pathelement?location="lib/maven-artifact-ant-2.0.2-dep.jar"/>
??????</classpath>
?</typedef>
?<artifact:dependencies?pathId="maven.classpath"?filesetId="maven.fileset">
?????? ?<artifact:pom?file="pom.xml"/>?
?</artifact:dependencies>
?<copy?todir="lib/">
????????<fileset?refid="maven.fileset"/>
????????<mapper?type="flatten"/>???
?</copy>
??? 第1句從maven-artifact-ant-2.0.2-dep.jar讀antlib.xml,讀出一堆maven的task。
????第2句分析pom.xml里的jar,如果沒有就上http://repo1.maven.org/maven2?把jar下載到${user.home}/.m2/目錄。并把所有jar定義成ant的fileset對象--maven.fileset。
???? 第3句把maven.fileset定義的,放在${user.home}/.m2/里的jar 拷貝到項目lib目錄。
??
????不過,相對來講Maven2還很不成熟,比如很多項目的pom是亂寫的,比如maven官網的速度實在太差,還經常抽筋死掉,比如有一些想要的新版官網上沒有。
??? 3. 自建私服
?
???? 自己建個私服是不錯的主意。其實也簡單,隨便拿臺http服務器,把${user.home}/.m2/ 目錄傳上去就行了
???? 在pom文件中,把私服的http url寫在官網的前面。???
????????<repository>
????????????<id>springside</id>
????????????<url>http://www.springside.org.cn/maven2</url>
????????</repository>
????????<repository>
????????????<id>maven</id>
????????????<name>slowly?office?site</name>
????????????<url>http://repo1.maven.org/maven2</url>
????????</repository>
????</repositories>
?? 4. 在私服加入自己的jar包
??? 對于官網沒有的新版,按目錄路徑傳一個jar包,加一個最簡單的pom文件,并且為它們生成checksum文件,用ant的task就可以:
????????<checksum?file="C:\checksum\spring-mock-2.0-m3.pom"?algorithm="SHA"?fileext=".sha1"/>
????</target>
Maven 1通過在build.properties中配置maven.repo.remote可以增加多個下載maven包的路徑...
一直以來都沒有切換為Maven 2,一方面是要重新學習,另一方面確實是沒有什么太吸引人的特性
maven2的問題是遠程repository上的東西不夠全,在beta1的時候發現過依賴越界的情況(某個包在repository上面有,但是其依賴包卻沒有)。現在還是有幾個比較常用東西不在上面(或者找不到,即不能按照正常的命名規則找到相應的目錄),需要本地install,也比較煩。不過它的依賴管理確實比maven1強多了,速度也快一些。
maven要成熟還要一段時間,像spring2.0Mx居然從來不傳pom文件,搞得maven2每次都要去各個站點search一下,拖慢很大速度。(明明沒任何東西要下載,還要擱上一分鐘才到下一步,補了這個pom后,沒東西下載時幾秒鐘就過去了)
Maven是否支持非jar的庫。如dll等。
http://www.mavenregistry.com/
另外就是我原本想用maven的site功能的,不過發現居然有亂碼問題,感覺很搞
http://www.mergere.com/common/reg.jsp?form_source=m-m2book&form_landing=DefaultPage
特別是repository的管理,依靠open source的發布站點還是很有風險,前些時間codehaus就down了一段時間,有的人就項目就不能運轉了;還有就是一些發布到central的jar本來就有問題,在fix之前,也會導致你的project編譯失敗。 所以還是建一個值得信賴的可靠的repository會讓maven運行的可靠的多。
就為了管理類庫就要花幾個月時間搞這個,暈菜。上Maven的主頁上看了一下介紹,真的很暈, 除了敬而遠之,沒有別的想法了。
類庫管理只是一個組件而已,幾個月的時間只是使用maven去完成一些任務,不僅僅限于管理類庫:) Maven的普及還需要一段時間
mvn的pom問題搜索我也碰到過。mvn對本地手工安裝(mvn install的jar也不生成pom.xml文件),只能手工自己補
--------------------------------
mvn install 我嘗試了,pom.xml是自動產生的。
D:\workspace\itmsdemo>mvn install
[INFO] Scanning for projects...
[INFO] ----------------------------------------------------------------------------
[INFO] Building Unnamed - com.novitech.itsm:itmsdemo:jar:1.0.0
[INFO] task-segment: [install]
[INFO] ----------------------------------------------------------------------------
[INFO] [resources:resources]
[INFO] Using default encoding to copy filtered resources.
Downloading: http://10.10.100.22/maven/nfa/nfa/1.0.0/nfa-1.0.0.pom
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Error building POM (may not be this project's POM).
Project ID: nfa:nfa
Reason: Error getting POM for 'nfa:nfa' from the repository: Error transferring file
nfa:nfa:pom:1.0.0
from the specified remote repositories:
central (http://repo1.maven.org/maven2),
itsm (http://10.10.100.22/maven)
[INFO] ------------------------------------------------------------------------
[INFO] For more information, run Maven with the -e switch
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2 seconds
[INFO] Finished at: Mon Dec 25 10:59:14 CST 2006
[INFO] Final Memory: 3M/6M
[INFO] ------------------------------------------------------------------------
nfa-1.0.0.jar是我的項目包,我放在本地的倉庫中是可以正確執行的,但是我把它拷貝到服務器的倉庫中就出現了上面的錯誤。不知為何?