关于Maven的依赖传递

Maven的强大之一在于依赖管理

有的时候Maven的依赖传递也会给我们带来一些问题


刚好有看到依赖传递的一些东西,于是乎自己参照文档以及一些资料做了部分尝试


1、有关于dependence中optional元素

官方的文档是这么说明的:

optional:
Marks optional a dependency when this project itself is a dependency. Confused? For example, imagine a project A that depends upon project B to compile a portion of code that may not be used at runtime, then we may have no need for project B for all project. So if project X adds project A as its own dependency, then Maven will not need to install project B at all. Symbolically, if => represents a required dependency, and --> represents optional, although A=>B may be the case when building A X=>A-->B would be the case when building X.
In the shortest terms, optional lets other projects know that, when you use this project, you do not require this dependency in order to work correctly.。

假设项目A需要在编译期而不是运行期间依赖项目B编译部分代码,那么我们不需要在所有的项目中都需要项目B,如果X项目将A项目添加为依赖,那么Maven不需要在管理X项目中使用到B项目,这种情况下,可以在A项目中该添加B项目作为依赖时,加上true,那么在X项目中添加A项目为依赖时并不会把项目B通过依赖传递而添加进来。

测试:

假设有项目project1,project2,project3, 其中 3=>1-->2(借用文档的符号,=>代表必须的依赖,-->代表可选)

project1,添加如下依赖

 
  	
  		com.lee
		project2
		 0.0.1-SNAPSHOT
  	
  


project3,添加如下依赖:

 
  	
  		com.lee
		project1
		 0.0.1-SNAPSHOT
  	
  


 最终我们可以看到在project3中,通过依赖传递,project2也被添加进去了,但是其实在这种状态下,3中是不需要2的,

关于Maven的依赖传递_第1张图片

现在修改project1的依赖,如下


  	
  		com.lee
		project2
		 0.0.1-SNAPSHOT
		 true
  	
  

此时,project3中可以看到,project2并没有再被包含进来,目的达到了

关于Maven的依赖传递_第2张图片

2、依赖过滤

还是之前的三个项目,project1 添加project2为依赖的时候,去掉标签,project3添加project1为依赖的时候,设置如下:

 
  	
  		com.lee
		project1
		 0.0.1-SNAPSHOT
		
		 	
		 		*
		 		*
		 	
		 
  	
  

这种情况下,在project3中,我们可以看到

关于Maven的依赖传递_第3张图片

以上就是单依赖过滤了,当然我们也可以添加多个过滤,可以通过通配符来操作,都能达到相同的目的如下:


*
*


(处于学习阶段,有不足之处,请多指教)



你可能感兴趣的:(Maven)