網上找半天找不到的結果,自己動手測試一下其實就出來了。好了,言歸正傳,在大多數分層項目中經常會遇到相互依賴的問題,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>,以子項目的爲準。