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>,以子项目的为准。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值