pom中parent和dependency区别以及dependencyManagement区别

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;

/**
 *
 */
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;

/**
 *
 */
public class Test {
    public static void main(String[] args) {
        StringUtils.isNotEmpty("");
        TestUtil tu=new TestUtil();
        tu.show();
    }
}

在C中添加同样的测试类和方法。

最后可以发现在B中,通过引用的项目A,可以使用A项目中中依赖的StringUtils的方法,但是不能调用A项目中自己定义的类和方法,C项目中通过依赖的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文件下,如果和中都对该jar做了依赖,以的为准,优先级高于。若前者没有对其依赖,而后者对其有依赖,则以后者为准。<**dependencyManagement>**里只是声明依赖,并不实现引入.

2.在不同的pom文件中,存在父子相互依赖关系的,父项目的pom中中对该jar做了依赖,而子项目中又依赖了该jar,如果子项目中没有指定<version>和,则继承父项目中该jar的<**version>和。**如果子项目中指定了<version>和,以子项目的为准。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值