maven 多模块管理的问题以及maven配置的总结

2018-12-10  本文已影响0人  太阳守护者Sunny

在一些平常的项目开发中,我们一般都会使用maven的多模块进行开发,但是有些时候在模块管理的时候可能会有一些误解,下面就我碰到的一些问题跟大家分享下。

多模块项目的创建

创建父模块

在这里插入图片描述 在这里插入图片描述

填写maven项目的 groupId、ArtifactId 以及 版本号

在这里插入图片描述

继续下一步,这里创建的时候,我之前都是填写 Project name 的时候,下面的 Project locationModule nameContent rootModule file location 这几个选项框都是联动的一起变的。

在这里插入图片描述

创建子模块

在这里插入图片描述
在这里插入图片描述

按照上述的步骤,一个简易的多模块项目就创建成功了。

本次新发现的一些点

pom文件的packaging

父模块与子模块的关联

子模块之间的相互引用

比如我按照上面的方法创建的有 maven-domain模块、maven-dao 模块、maven-service模块,他们之间的关系如下
maven-service 引用 maven-dao, maven-dao 引用 maven-domain

maven-service 模块如果想用到 maven-dao 模块的代码(比如UserDao这个类),maven-service模块的pom文件就要加入

        <dependencies>
            <dependency>
                <groupId>com.sun</groupId>
                <artifactId>maven-dao</artifactId>
                <version>1.0.0</version>
            </dependency>
        </dependencies>

以上都是正常的使用步骤。

这次我发现两个好玩一点的:

  1. 在maven-service模块里面点击UserDao这个类,你会发现直接能跳到maven-dao模块的UserDao源码(之前知道可以,但是没有仔细深究过)。
  2. 即使这个version版本号乱填,maven仓库(本地仓库、远程仓库)都没有的,maven-service代码也能编译通过,不会报错,但是maven打包会报错的(引用的版本号,仓库里面没有)

后面我又尝试几次,发现只要在同一个Idea窗口下面,别的项目的 pom配置也可以引入过来,编译不报错,也能跳到源码里面,打包要看情况的(别的项目先打包,本地仓库里面有了jar,然后在打包自己项目就可以了,当然版本号要一致)

dependencyManagement 和 dependencies的区别

dependencyManagement 的使用场景

  1. 一般使用在父模块上面
  2. 统一管理子模块使用的一些公用的jar的版本号
  3. 子模块只要声明一下就行了,不需要写版本号,自动继承父模块的版本号
  4. 如果子模块不声明,就不会引用jar
  5. 如果子模块写了版本号,子模块使用的时候就会以自己声明的版本号为准

dependencies的使用

如果父模块使用的话,即使子模块没有声明,也会继承父模块声明的那些依赖(全部继承)

总结

dependencyManagement 就好像 父亲给孩子准备好了玩具,孩子想用的时候就去爸爸那里拿,不想用的时候就不用。dependencies 就好像 父亲给孩子准备了玩具,所有的这些玩具,孩子想要也得要,不想要也得要。

上一篇 下一篇

猜你喜欢

热点阅读