1、首先,确保eclipse中已经配置了maven,如下图: 2、New-Project-MavenProject...如下图,选择create a simple project,原因父项目需要建立的packaging为POM,子项目建立的packaging为jar或者war,勾选此处,在下一步中可以选择packaging: 3、选择打包方式 4、创建子工程,New-Project-Maven Module,再次提醒,父项目的packaging选择POM,子项目选择Jar或者war,顺便说一句,一般来说,要创建在tomcat里运行的项目,应该是要创建war,比如本文说的service子项目和web子项目,应该是创建成war,但是有例外是,如果要创建spring boot微服务项目,因为spring boot采用的都是富jar形式,就需要所有的子项目都为jar,这仅仅是个人理解,具体按照自己的需求建立。 5、选择子工程的打包方式,这里设置为jar 6、写到此时,已经创建完成了,我们可以看一下项目架构 7、我们把整个项目(父项目)上打包,编译运行,再看一下项目架构: 8、我们可以在DemoParent-Son2中引用项目DemoParent-Son1,直接在pom文件中加入依赖即可。
这样,在子项目DemoParent-Son2中就能直接调用子项目DemoParent-Son1中的类。 注意:子工程之间的引用:子工程若是web项目(对应的自动达成的就是war包),可以引用子工程是java项目的工程。但是子工程是java项目却不能引用子工程是web项目的工程。 9、写到此时,项目已经告一段落了,但是小编基于需求,又尝试了一下maven的子项目war与war之间的引用。发现也是可以的。我们再新建一个web子工程DemoParent-Son3,在pom文件中引入子项目DemoParent-Son2,配置文件如下:
两个项目编译、打包之后,生成的WAR文件(DemoParent-Son3.war和DemoParent-Son2.war)几乎是相同的,尽管DemoParent-Son3项目还没有任何类和资源。重要的是,两个WAR归档文件中都有全部的依赖库和配置。 根据Java规范,classpath不能指定WAR文件。这就意味着在编译时,DemoParent-Son3项目无法访问DemoParent-Son2项目中定义的类,所以在DemoParent-Son3l项目中,我们不能像常规类组件那样扩展或使用DemoParent-Son2定义的类。要解决这一问题,我们必须重新设置maven-war-plugin的一项缺省配置,该设置如下面所示:
可以看到,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,如下:
源代码链接https://pan.baidu.com/s/13baE0YjgbEGbM263MRWb5g |
|
来自: liang1234_ > 《maven》