http://1.1lifes.sinaapp.com/?p=202
先說說maven的優點吧。
一、maven支持工程模版。這個也是“約定優於配置”精神的體現,maven的eclipse插件和命令行都支持使用選擇的Archetype信件maven工程。這個主要是有利於團隊合作開發,規定了各個文件夾的用途。其實在沒maven之前,這種工程文件佈局就已經是一種廣泛的共識了。只是它略帶強制的意味。
—- project
|– pom.xml (pom)
|– src
|– main
|– java
|– resources
|– test
|– java
|– resources
二、依賴庫的管理,這應該是它最大的優點了。這個簡直是顛覆性的。想想沒有它之前我們下載jar包是多麼的痛苦,更別提升級jar包了。有了maven只要在pom最相應的添加和修改即可。但這個有一點小小的不爽,如果是之前下載jar包,一股腦下載和依賴的就行,現在要找groupid artifact version。幸好這個網站不錯,推薦:http://mvnrepository.com
三、擴展性很好。可以方便的支持各類插件,涉及到方方面面,比如編譯、打包、依賴檢查、web容器啓動,用例執行等等。
四、pom文件的繼承。大項目,一般子項目(maven module)很多,爲了防止父pom過大不易維護,子項目單獨使用的jar只在自己的pom設置即可。
豐富的資料,權威指南 等等其他方面的優點也有,這裏不一一列舉了 ………….
但它確實還有很多不爽的地方,足以讓人崩潰。可能正是由於它的一些優點導致了它的缺點。我使用感覺最深的就是不能完全的熱部署。先說說我現在的情況。我的一個maven功能有多個module,其中一個是web module,這個是我程序對外的入口。我使用了jetty的maven插件,用於一站式打包運行。
先說說jetty maven插件的使用。
普通使用方式:一、maven命令打包 mvn clean install 二、啓動服務器 mvn jetty:run
eclipse集成 debug啓動方式。具體 參見 http://simile.mit.edu/wiki/How_to_debug_mvn_jetty:run_in_Eclipse
之前說了,我的工程結構,使用jetty:run的方式肯定不行,這個只能運行web module中target的內容;我現在是使用jetty:run-explored的方式,這樣的話java代碼是可以熱部署的,但jsp之類的文件就不行了,需要人工拷貝過去。無奈,附上我後來寫的bat文件,內容如下:
w: cd W:/tools/eclipse/workspace_elifes/elifes call mvn clean install cd W:/tools/eclipse/workspace_elifes/elifes/elifes-web set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,address=4000,server=y,suspend=y call mvn jetty:run-exploded |
這個還存在一個問題,因爲這個都是通過eclipse提供的執行外部工具功能,啓動後的運行日誌內嵌的控制檯(console)並不能感知java類給出超鏈接顯示,這也是不方便調試的一個點。
如果是用ant + eclipse wtp開發的模式應該就沒這麼痛苦了。
如果你有好的解決方式,請告知我,萬分感謝!