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