Maven多模块与依赖管理

Maven多模块与依赖管理

标签

module,即模块。

之所以有module的概念,是因为一个大型的软件系统,往往由多个子系统构成。

这些子系统并不是以一个工程的形式存在的,而是多个工程并行存在,从而满足项目管理和并行开发的需要。


模块之间的依赖关系会很复杂,可能的情况是:

Maven多模块与依赖管理_第1张图片

如果不通过module管理上述复杂的依赖关系,你的做法可能是:

每个模块单独一个maven项目,单独构建每个maven项目,然后当你需要的时候在中添加相应项目的依赖。


问题在于:

每个模块的构建都要单独进行,如果你的项目有几十个模块,那么每次构建项目将需要运行大量的命令。并且项目之间的依赖将影响构建的顺序,如模块4依赖模块1和模块2,那么模块1和模块2必须在模块4之前被构建。


最佳实践:

创建一个parent项目,在parent.pom中定义所有的,并定义所有的版本号,从而一次构建parent项目,就可以完成所有模块项目的构建。


标签

这个标签的存在,是为了解决jar包依赖的版本冲突问题。

可能的情况是:

module1的依赖:module1->XXversion1

module2的依赖:module2->XXversion2

此时会出现jar包版本冲突,使用解决方式如下:

Maven多模块与依赖管理_第2张图片

在多模块项目中,将在parent.pom的中定义所有依赖的版本号,从而防止版本号冲突。

eclipse中构建多模块项目的过程

具体操作的过程,因为过于繁琐,所以这里引用一篇博文来介绍

eclipse中构建maven多模块项目

最终,我的目录结构是:

Maven多模块与依赖管理_第3张图片

各个模块pom.xml

1.parant



  4.0.0
  org.lin.many
  parent
  0.0.1-SNAPSHOT
  pom 
  
    module1
    module2
    modules-all 
  
  
    
  	3.8.1
  	4.1.1.Final
  	2.8.8
  	2.4.2_4
  
  
  
  	
  		
  		
  			org.lin.many
  			module1
  			${project.version}
  		
  		
  			org.lin.many
  			module2
  			${project.version}
  		
  		
  			org.lin.many
  			modules-all
  			${project.version}
  		
  		
  		
  		
			io.netty
			netty-all
			${netty-version}
		
  	    
	      junit
	      junit
	      ${junit-version}
	      test
	    
		
		    com.fasterxml.jackson.core
		    jackson-core
		    ${jackson-version}
		
		
			org.apache.servicemix.bundles
			org.apache.servicemix.bundles.jexcelapi
			${jexcel-version}
		
  	
  
  

2.module1(module1和module2差不多,只贴一个)



  4.0.0
   
    org.lin.many
    parent
    0.0.1-SNAPSHOT
  
  module1
  jar
  module1
  http://maven.apache.org
  
    UTF-8
  
   
    
      junit
      junit
      test
    
		
			io.netty
			netty-all
		
		
		
			org.apache.servicemix.bundles
			org.apache.servicemix.bundles.jexcelapi
		
  

3.modules-all

这个模块整合了module1和module2



  4.0.0
  
    org.lin.many
    parent
    0.0.1-SNAPSHOT
  
  modules-all
  modules-all
  http://maven.apache.org
  
    UTF-8
  
  
  	 
  		org.lin.many
  		module1
  	
  	
  		org.lin.many
  		module2
  	
    
      junit
      junit
      test
    
	
		io.netty
		netty-all
	
	
	
	    com.fasterxml.jackson.core
	    jackson-core
	
	
	
		org.apache.servicemix.bundles
		org.apache.servicemix.bundles.jexcelapi
	
  

总结

这样去构建maven项目应该是最佳实践了,因为开源项目就是这样去做的,如apache的activeMQ。

吐槽一下自己的博文,别人都是图文并茂逻辑清晰,而我自己写的,自问自己也看不下去,权当一个总结吧!

你可能感兴趣的:(maven)