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


 
 
  1. import org.apache.commons.lang3.StringUtils;
  2. /**
  3. * @author author
  4. * @date 2018/8/2 14:09
  5. */
  6. public class TestUtil {
  7. public void show(){
  8. System.out.println(StringUtils.isNotEmpty( "123"));
  9. }
  10. }

pom:


 
 
  1. <groupId>com.mycompany </groupId>
  2. <artifactId>test1 </artifactId>
  3. <version>1.0-SNAPSHOT </version>
  4. <packaging>war </packaging>
  5. <dependencies>
  6. <dependency>
  7. <groupId>org.apache.commons </groupId>
  8. <artifactId>commons-lang3 </artifactId>
  9. <version>3.7 </version>
  10. </dependency>
  11. </dependencies>

项目A中引入了一个commons-lang3的方法,开发中常用到里面的StringUtils判断字符串的方法,以此为其中一个测试点

接着项目B

pom


 
 
  1. <groupId>com.mycompany</groupId>
  2. <artifactId>test15</artifactId>
  3. <version> 1.0-SNAPSHOT</version>
  4. <packaging>war</packaging>
  5. <parent>
  6. <groupId>com.mycompany</groupId>
  7. <artifactId>test1</artifactId>
  8. <version> 1.0-SNAPSHOT</version>
  9. </parent>

然后项目C

pom


 
 
  1. <groupId>com.mycompany</groupId>
  2. <artifactId>test20</artifactId>
  3. <version> 1.0-SNAPSHOT</version>
  4. <packaging>war</packaging>
  5. <dependencies>
  6. <dependency>
  7. <groupId>com.mycompany</groupId>
  8. <artifactId>test1</artifactId>
  9. <version> 1.0-SNAPSHOT</version>
  10. </dependency>
  11. </dependencies>

在B中添加测试类和方法:


 
 
  1. import com.test.aa.TestUtil;
  2. import org.apache.commons.lang3.StringUtils;
  3. /**
  4. * @author author
  5. * @date 2018/8/2 14:13
  6. */
  7. public class Test {
  8. public static void main(String[] args) {
  9. StringUtils.isNotEmpty( "");
  10. TestUtil tu= new TestUtil();
  11. tu.show();
  12. }
  13. }

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

 

最后可以发现在B中,通过<parent>引用的项目A,可以使用A项目中<dependency>中依赖的StringUtils的方法,但是不能调用A项目中自己定义的类和方法,C项目中通过<dependency>依赖的A,两者却都可以调用。

 

然后说下dependencyManagement


 
 
  1. <dependencyManagement>
  2. <dependencies>
  3. <dependency>
  4. <groupId>org.springframework</groupId>
  5. <artifactId>spring-core</artifactId>
  6. <version> 3.2.7</version>
  7. </dependency>
  8. </dependencies>
  9. </dependencyManagement>
  10. <dependencies>
  11. <dependency>
  12. <groupId>org.springframework</groupId>
  13. <artifactId>spring-core</artifactId>
  14. </dependency>
  15. </dependencies>

1.在同一个pom文件下,如果<dependencies>和<dependencyManagement>中都对该jar做了依赖,以<dependencies>的为准,优先级高于<dependencyManagement>。若前者没有对其依赖,而后者对其有依赖,则以后者为准。<dependencyManagement>里只是声明依赖,并不实现引入.

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值