pom中parent和dependency區別以及dependencyManagement區別

網上找半天找不到的結果,自己動手測試一下其實就出來了。好了,言歸正傳,在大多數分層項目中經常會遇到相互依賴的問題,B項目依賴A項目,C也依賴A項目,這時候用dependency還是用parent呢?

這兩者是有區別的:

下面做一個測試,A項目作爲一個公共項目,被B項目和C項目所依賴,B以parent的方式,C以dependency的形式。在A項目創建一個類,添加一個方法,然後分別在項目B、C中寫測試方法,調用A項目類中的方法。

 

項目A

添加一個自己寫的類TestUtil

import org.apache.commons.lang3.StringUtils;

/**
 * @author author
 * @date 2018/8/2 14:09
 */
public class TestUtil {

    public void show(){
        System.out.println(StringUtils.isNotEmpty("123"));
    }
}

pom:

 <groupId>com.mycompany</groupId>
  <artifactId>test1</artifactId>
  <version>1.0-SNAPSHOT</version>
 <packaging>war</packaging>

<dependencies>
    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-lang3</artifactId>
      <version>3.7</version>
    </dependency>

</dependencies>

項目A中引入了一個commons-lang3的方法,開發中常用到裏面的StringUtils判斷字符串的方法,以此爲其中一個測試點

接着項目B

pom

 <groupId>com.mycompany</groupId>
  <artifactId>test15</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

 <parent>
     <groupId>com.mycompany</groupId>
     <artifactId>test1</artifactId>
     <version>1.0-SNAPSHOT</version>
</parent>

然後項目C

pom

<groupId>com.mycompany</groupId>
  <artifactId>test20</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

<dependencies>
    <dependency>
      <groupId>com.mycompany</groupId>
      <artifactId>test1</artifactId>
      <version>1.0-SNAPSHOT</version>
    </dependency>
</dependencies>

在B中添加測試類和方法:

import com.test.aa.TestUtil;
import org.apache.commons.lang3.StringUtils;

/**
 * @author author
 * @date 2018/8/2 14:13
 */
public class Test {
    public static void main(String[] args) {
        StringUtils.isNotEmpty("");
        TestUtil tu=new TestUtil();
        tu.show();
    }
}

在C中添加同樣的測試類和方法。

 

最後可以發現在B中,通過<parent>引用的項目A,可以使用A項目中<dependency>中依賴的StringUtils的方法,但是不能調用A項目中自己定義的類和方法,C項目中通過<dependency>依賴的A,兩者卻都可以調用。

 

然後說下dependencyManagement


<dependencyManagement>  
      <dependencies>  
            <dependency>  
                <groupId>org.springframework</groupId>  
                <artifactId>spring-core</artifactId>  
                <version>3.2.7</version>  
            </dependency>  
    </dependencies>  
</dependencyManagement>  
  

<dependencies>  
       <dependency>  
                <groupId>org.springframework</groupId>  
                <artifactId>spring-core</artifactId>  
       </dependency>  
</dependencies>  

1.在同一個pom文件下,如果<dependencies>和<dependencyManagement>中都對該jar做了依賴,以<dependencies>的爲準,優先級高於<dependencyManagement>。若前者沒有對其依賴,而後者對其有依賴,則以後者爲準。<dependencyManagement>裏只是聲明依賴,並不實現引入.

2.在不同的pom文件中,存在父子相互依賴關係的,父項目的pom中<dependencyManagement>中對該jar做了依賴,而子項目中<dependencies>又依賴了該jar,如果子項目中沒有指定<version>和<scope>,則繼承父項目中該jar的<version>和<scope>。如果子項目中指定了<version>和<scope>,以子項目的爲準。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章