Maven Dependency設定,詳解!
用了Maven,所需的JAR包就不能再像往常一樣,自己找到並下載下來,用IDE導進去就完事了,Maven用了一個專案依賴 (Dependency)的概念,用俗話說,就是我的專案需要用你這個jar包,就稱之為我的專案依賴你這個包,換句話說,你這個JAR包就是我這個專案的Dependency。
於是很多人在剛用Maven的時候,就會在加Dependency時栽跟頭,明明我手頭上就有需要的JAR嘛,它偏不讓我用,什麼道理,跟著就是生悶氣,少點耐性的,就會說Maven怎麼怎麼不爽,其實,如果你理解了Maven的一些機制,一些配置及管理的流程,就會覺得它其實很爽。
我暫且不談Maven的長篇概念(其實我也還很多很多不懂),我先給大家介紹一個簡單的查詢方法,讓你很快地找到所需的Dependency,並配置到你的pom.xml裡面去。
最快捷方法:
GOOGLE搜尋:maven 你需的jar包名稱 repository
比如我要做EJB,我要找jboss-j2ee.jar的Dependency
就在GOOGLE裡輸入
maven jboss-j2ee repository
在結果的第一條,進去你就可以在頁面裡找到下面這段
<dependency>
<groupId>jboss</groupId>
<artifactId>jboss-j2ee</artifactId>
<version>4.0.2</version>
</dependency>
你把上面這段程式碼貼到你的Maven專案的pom適當的位置去,然後執行maven,Maven就會自動下載所需的jar及相關的pom資訊,你不用管它,Maven會幫你下載,並放到適當的位置。
我再舉幾個查詢例項,讓大家熟悉一下怎麼搜尋
下面我要找 struts.jar
在GOOGLE裡輸入
maven struts repository
就很快可以找到下面這段程式碼
<dependency>
<groupId>struts</groupId>
<artifactId>struts</artifactId>
<version>1.2.9</version>
</dependency>
我還要找hibernate
在GOOGLE輸入
maven hibernate repository
在結果的第一條記錄出現了很多個不同的hibernate連結(因為有很專案用了hibernate嘛)我們就選用org.hibernate的,看起來專業點嘛,呵呵
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate</artifactId>
<version>3.2.6.ga</version>
</dependency>
好了,SSH可不能少了中間那個S,Spring嘛
在GOOGLE裡輸入
maven spring repository
在第一個結果進去,我們這次選擇org.springframework的,
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
<version>2.5.5</version>
</dependency>
其它的我就不一一舉例了,大家自己試試,其實這個方法可以解決大多數常用包的Dependency查詢,不用專門記那些repository下載站的網址嘛,不過始終這是非正規做法,其它要想更好地找到想要的Dependency,還是得了解maven repository是啥玩意,它的local repository庫概念,以及怎樣建立自己自己repository伺服器(這個我還不太熟,這裡就不講了,大家自己去其它地方找相關資料,免得被我誤導了)
Maven的repository,說白了就是dependency的倉庫,它按照一定的規則將dependency存放起來,以作快取,如果本機的 repository找不到某個dependency,它就會自動去找到網上其它相關聯的repository,找到的話將其下載至本地,那麼下次它就不再去其它地方下載了,直接從本地獲取。
本地的repository在哪可找到?
預設repository地址:當前使用者的私人目錄 + .m2
如果你設定了Maven目錄下的conf/setting.xml的local repository屬性,則不再是預設的repository地址,而使用你指定的地址。
找到下面這段,將它複製一份,放到註釋外面,改成你自己的repository路徑即可
<localRepository>c:/mvn repository/</localRepository>
Maven按什麼規則去存放Dependency?
下面我們來拿hibernate來作例子,以介紹在Maven執行並下載到所需的Dependency後怎麼快取到本地的repository
下面這個是hibernate的Dependency配置
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate</artifactId>
<version>3.2.6.ga</version>
</dependency>
它被下載後將會被存放至
%repository%/org/hibernate/hibernate/3.2.6.ga/hibernate-3.2.6.ga.jar
其中%repository%就是你本地的repository目錄!
不知大家看出來了沒有,它是按你的Dependency的groupid + artifactid + version,然後以點號作分隔,來建立資料夾的,最後建立的資料夾如下
|--org
|--hibernate
|--hibernate
|--3.2.6.ga
|--hibernate-3.2.6.ga.jar
可能會有些人會問那個jar包的名字是怎麼來的,細心的人或許早己觀察出來了,沒錯,就是artifactId + "-" + version + ".jar"。
好了,下面我們按這個規則去找一下另外一個Dependency放在哪吧
<dependency>
<groupId>com.google.gwt</groupId>
<artifactId>gwt-servlet</artifactId>
<version>1.4.61</version>
</dependency>
我們現在根據之前所講的規則,先進入你的本地repository目錄,然後進入com目錄,再進入google目錄,再進入gwt目錄,再進入 gwt-servlet目錄,再進入1.4.61目錄,跟著你就可以發現一個名叫gwt-servlet-1.4.61.jar和其它一些檔案了大家試試看吧!《注意:你在首次使用這個Dependency時,一定要執行Maven,讓它去下載到需要的包,下載成功後你才能按上面的步驟找到,不然你找不到別亂罵我,你都沒下載的話,肯定找不到了:( 》
在你掌握這個技巧之後,有很多時候你可以根據所需包的package路徑,自己摸它的Dependency,這個就不詳談了,總之你瞭解後,找Dependency不會成問題的,非常簡單的事
這個時候,就有另一些使用者會提出疑問,我要用的jar包是我自己開發的,或是朋友,或是網友傳來的,在網上根據找不到,怎麼在Maven裡面使用它們呢? 其實辦法是肯定有的,而且也不難,也是常常要用到的,下面我來簡單介紹一下幾個方法:
前提,肯定是你先寫到pom裡面去,組織隨你寫,artifact 寫你的jar名,或者隨便寫,version你也寫上你想要的,如
<dependency>
<groupId>com.mydomain.ooooo</groupId>
<artifactId>my-jar</artifactId>
<version>100.1.1</version>
</dependency>
一、用好你的IDE!
現在大家用的IDE,無非就是Eclipse,或者netbeans,或是JBuilder,據我所知,現在大部份人都向前兩者轉移,這些IDE都提供了對Maven的支援,不過通常都需要你裝外掛才能開啟並使用Maven的專案,怎麼裝maven外掛我就不介紹了,大家自己上網找找別人寫的文章吧。在你裝好外掛後,通常會有一個libraies目錄,裡面列出你專案要用到的jar包,你右鍵點選本地還沒有新增進去的jar包,選擇本地安裝(Manually install artifact),選中你那個特殊的jar包,然後IDE會自動呼叫maven外掛完成整個安裝配置過程,下次你就不再這樣子做了,因為你本地 repository己經有了。
二、手動將jar包放到本地repository裡面去
根據先前介紹的maven repository存放規則,自己建好目錄,改好jar的檔名,自己拷進去,如
進到你本地的repository目錄
建一個com資料夾,點進去
再建一個mydomain資料夾,點進去
再建一個ooooo資料夾,點進去
再建一個my-jar資料夾,點進去
再建一個100.1.1資料夾,點進去
再把你的jar包,改名為my-jar-100.1.1.jar,放到100.1.1資料夾裡面去,
然後執行你的maven專案,看看它會不會build成功,事實上如果你之前做的資料夾沒錯,大小寫沒問題,或沒其它小失誤,你的專案就可以正常用到你自己的jar包了
不過這也需要你知道maven repository的存放規則才知道怎麼在網站上找,找到你還得自己寫dependency的配置程式碼,本人不常來這裡找。不過各有所好,大家選擇合適自己的