使用eclipse创建maven的父子工程

1、首先,确保eclipse中已经配置了maven,如下图:

使用eclipse创建maven的父子工程_第1张图片使用eclipse创建maven的父子工程_第2张图片

2、New-Project-MavenProject...如下图,选择create a simple project,原因父项目需要建立的packaging为POM,子项目建立的packaging为jar或者war,勾选此处,在下一步中可以选择packaging:

使用eclipse创建maven的父子工程_第3张图片

3、选择打包方式

使用eclipse创建maven的父子工程_第4张图片

4、创建子工程,New-Project-Maven Module,再次提醒,父项目的packaging选择POM,子项目选择Jar或者war,顺便说一句,一般来说,要创建在tomcat里运行的项目,应该是要创建war,比如本文说的service子项目和web子项目,应该是创建成war,但是有例外是,如果要创建spring boot微服务项目,因为spring boot采用的都是富jar形式,就需要所有的子项目都为jar,这仅仅是个人理解,具体按照自己的需求建立。

使用eclipse创建maven的父子工程_第5张图片

5、选择子工程的打包方式,这里设置为jar

使用eclipse创建maven的父子工程_第6张图片

6、写到此时,已经创建完成了,我们可以看一下项目架构

使用eclipse创建maven的父子工程_第7张图片

使用eclipse创建maven的父子工程_第8张图片

7、我们把整个项目(父项目)上打包,编译运行,再看一下项目架构:

使用eclipse创建maven的父子工程_第9张图片

8、我们可以在DemoParent-Son2中引用项目DemoParent-Son1,直接在pom文件中加入依赖即可。

     
  	
  		com.nancy
  		DemoParent-Son1
  		0.0.1-SNAPSHOT
  		jar
  	
   

这样,在子项目DemoParent-Son2中就能直接调用子项目DemoParent-Son1中的类。

注意:子工程之间的引用:子工程若是web项目(对应的自动达成的就是war包),可以引用子工程是java项目的工程。但是子工程是java项目却不能引用子工程是web项目的工程。

9、写到此时,项目已经告一段落了,但是小编基于需求,又尝试了一下maven的子项目war与war之间的引用。发现也是可以的。我们再新建一个web子工程DemoParent-Son3,在pom文件中引入子项目DemoParent-Son2,配置文件如下:



  4.0.0
  
    com.nancy
    DemoParent
    0.0.1-SNAPSHOT
  
  DemoParent-Son3
  0.0.1-SNAPSHOT
  war
  
  
  	  	
  		com.nancy
  		DemoParent-Son2
  		0.0.1-SNAPSHOT
  		war
  		
  
  
    DemoParent-Son3
        
		
			
				maven-antrun-plugin
				
					
						copy-lib-src-webapps
						package
						
							
								
								
									
										
									
								
							
						
						
							run
						
					
				
			
		
  
两个项目编译、打包之后,生成的WAR文件(DemoParent-Son3.war和DemoParent-Son2.war)几乎是相同的,尽管DemoParent-Son3项目还没有任何类和资源。重要的是,两个WAR归档文件中都有全部的依赖库和配置。

根据Java规范,classpath不能指定WAR文件。这就意味着在编译时,DemoParent-Son3项目无法访问DemoParent-Son2项目中定义的类,所以在DemoParent-Son3l项目中,我们不能像常规类组件那样扩展或使用DemoParent-Son2定义的类。要解决这一问题,我们必须重新设置maven-war-plugin的一项缺省配置,该设置如下面所示:

  
    
      maven-war-plugin
      
        true
      
    
  
启用attachClasses选项可以把JAR文件(DemoParent-Son2.jar)和标准的WAR文件同时安装到Maven仓库中。要访问该JAR文件,我们需要像如下所示的那样修改DemoParent-Son3项目的依赖列表。
  
  		
  		com.nancy
  		DemoParent-Son2
  		0.0.1-SNAPSHOT
  		jar
  		classes
  		provided
  		
  	  	
  		com.nancy
  		DemoParent-Son2
  		0.0.1-SNAPSHOT
  		war
  		
  
可以看到,DemoParent-Son3项目用DemoParent-Son2 WAR创建最终的Web归档文件,出于编译需要,还使用了DemoParent-Son2的类(打包在JAR里)。我们将属性classifier设置为classes,以此定义该从仓库中选择哪个工件。将scope设置为provided,则是告诉Maven只在编译时需要该工件,运行时则从其他地方获得。“其他地方”当然就是指DemoParent-Son3项目的WAR工件,WAR插件会将WAR和JAR合并在一起。现在已经正确配置了依赖关系,那我们就开始测试一下。
在DemoParent-Son3中创建一个测试类Test,在测试类中调用一下DemoParent-Son2中的类Student,如下:
public class Test {
	
	public static void main(String[] args) {
		Student s = new Student();
		s.setName("aaaa");
		System.out.println(s.getName()+"1111111");
	}
}
运行一下,发现输出栏有我们要的值。
源代码链接https://pan.baidu.com/s/13baE0YjgbEGbM263MRWb5g
提取码4y45

你可能感兴趣的:(Maven)