Posted on 2011-03-04 16:29
landor 閱讀(757)
評(píng)論(0) 編輯 收藏 所屬分類:
maven
1 dependency中的scope
compile:默認(rèn),編譯范圍,會(huì)被打包;
provide:已經(jīng)提供范圍,比如文件A.java在打包的時(shí)候需要xxx.jar,這個(gè)jar在目標(biāo)環(huán)境中已經(jīng)存在了,我們不需要把他也一起打包,就用provided
runtime:編譯的時(shí)候不需要,運(yùn)行和測(cè)試的時(shí)候需要;
test:在編譯和運(yùn)行的時(shí)候不需要,只有在測(cè)試的時(shí)候才需要;
system:類似provided,但是必須提供依賴的路徑,比如所以來的jar文件的位置;這樣maven不會(huì)在本地倉(cāng)庫(kù)中尋找它了;不被推薦使用;
2
dependency中的version
(, )不包含,[, ]包含,例如:
<version>1.4.1</version> 版本是1.4.1
<version>[3.8,4.0)</version> 版本是>=3.8并且<4.0
<version>[,4.0)</version> 版本是任何<4.0
<version>[3.8,)</version> 版本是任何>=3.8
3
dependency是傳遞的
比如spring依賴common-xxx依賴,我們只需要引入spring dependency即可,maven會(huì)自動(dòng)去找spring的那些依賴;
4
dependency依賴排除
有時(shí)候A依賴B,B依賴C,但是C在中央倉(cāng)庫(kù)或者你的倉(cāng)庫(kù)中沒有,就會(huì)有問題。比如hibernate依賴Sun JTA API,但是他在中央Maven 倉(cāng)庫(kù)中沒有,而在倉(cāng)庫(kù)中有另一個(gè)JTA實(shí)現(xiàn),并不是Sun的,就可以這么用:
<dependencies>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate</artifactId>
<version>3.2.5.ga</version>
<exclusions>
<exclusion>
<groupId>javax.transaction</groupId>
<artifactId>jta</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.geronimo.specs</groupId>
<artifactId>geronimo-jta_1.1_spec</artifactId>
<version>1.1</version>
</dependency>
</dependencies>
這兩個(gè)依賴是沒有關(guān)系的,只不過是在geronimo-jta_1.1_spec提供的內(nèi)容正好是hibernate所需要的;
5
dependencyManagement的作用
擋在parent pom.xml中定義了dependencyManagement之后,子項(xiàng)目可以引用它而不用聲明版本號(hào),就是說他會(huì)默認(rèn)parent pom.xml中的版本號(hào),比如:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.2</version>
</dependency>

<dependencies>
</dependencyManagement>
那么子項(xiàng)目就可以引用它:
<project>
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.sonatype.mavenbook</groupId>
<artifactId>a-parent</artifactId>
<version>1.0.0</version>
</parent>
<artifactId>project-a</artifactId>

<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
</dependencies>
</project>
可以在子pom.xml中寫版本,那樣會(huì)覆蓋parent pom.xml中的依賴的版本;