idea多模块的模块被忽略是自己添加吗?

最近在负责的是一个比较复杂项目模块很多,代码中的二级模块就有9个部分二级模块下面还分了多个模块。代码中的多模块是用maven管理的每个模块都使用spring boot框架。之前囿零零散散学过一些maven多模块配置的知识但没自己从头到尾创建和配置过,也快忘得差不多了这次正好对照着这个项目,动手实践一下下面我们就开始吧。

maven多模块项目通常由一个父模块和若干个子模块构成每个模块都对应着一个pom.xml。它们之间通过继承和聚合(也称作多模块)相互关联多模块适用于一些比较大的项目,通过合理的模块拆分实现代码的复用,便于维护和管理

因为本系列的下一篇是《Spring Boot集成Dubbo》,所以本章就以创建多模块的dubbo项目作为示例示例中的开发环境是Win 7,编辑器是Intellij idea多模块Java版本是1.8。

首先我们在idea多模块中创建一个spring boot工程莋为父项目

二、点击Next,进入下一步可以设置项目的一些基本信息。

groupId和artifactId统称为“坐标”是为了保证项目唯一性而提出的。groupId是项目组织唯一的标识符实际对应JAVA的包的结构,ArtifactID是项目的唯一的标识符实际对应项目的名称,就是项目根目录的名称groupId一般分为多个段,一般第┅段为域第二段为公司名称。举个apache公司的tomcat项目例子:这个项目的groupId是org.apache它的域是org,公司名称是apacheartifactId是tomcat。包结构package最好是以groupId.artifactId打头的

因为后续打算将“代码学习和实践”写成一个系列的文章,文中演示的工程都作为该工程的子模块所以这里项目名Name就填写CodeLearnAndPractice。

这里是个人练习的项目不涉及公司名,但groupId、artifactId、package参数的填写还是尽量按照上面的规范来填写,这里package就直接用groupId.artifactId如下所示:

三、点击Next,进入下一个选择dependency的界面莋用是在pom中自动添加一些依赖,在项目开始时就下载这里我们暂时不勾选任何依赖。

四、点击Next进入下一个界面,填写工程名并选择笁程所在目录。填写完成后点击Finish,即可创建一个spring boot项目

该模块为dubbo服务的提供方,Name为springboot-dubbo-server后面其他的参数都可参照父模块的参数设置。

以上3個模块创建完成之后整个项目的目录结构如下图所示。

我们把下图选中的无用的文件及文件夹删掉包括三个模块的mvnw、mvnw.cmd文件及.mvn文件夹,還有父模块的src目录因为此处的父模块只做依赖管理,不需要编写代码

到这里,一个父模块和两个子模块都创建完成啦~~

父pom是为了抽取统┅的配置信息和依赖版本控制方便子pom直接引用,简化子pom的配置

下面介绍下父pom的配置中需要注意的一些地方。我贴出的pom看起来会有点冗餘因为其中一些不需要的地方,我没有直接删掉而是注释掉并加了说明,是为了后续查看的时候还能清楚删掉的原因

多模块项目中,父模块打包类型必须是pom同时以给出所有的子模块,其中每个module都是另外一个maven项目。

继承是maven中很强大的一种功能继承可以使子pom获得parent中嘚各项配置,对子pom进行统一的配置和依赖管理父pom中的大多数元素都能被子pom继承,想深入了解的同学可自行搜索学习~~

一般在项目最顶层的父pom中使用该元素让所有子模块引用一个依赖而不用显式的列出版本号。maven会沿着父子层次向上走直到找到一个拥有dependencyManagement元素的项目,然后它僦会使用在这个dependencyManagement元素中指定的版本号

4、使用properties控制依赖包的版本号,便于版本维护

在properties标签中添加各依赖包的版本号,然后在dependency中直接引用該依赖版本号的值即可

    <!--该插件作用是打一个可运行的包,必须要写在需要打包的项目里这里的父模块不需要打包运行,所以删掉该插件-->

子模块的parent要使用顶层的父模块.

父模块pom中使用dependencyManagement来管理的依赖,在子模块pom中就不需要再写版本号了exclusion元素也不需要再写。

当dependency A自身的依赖B與其他dependency存在冲突的时候(最常见的就是版本冲突),我们就需要把B排除掉这时就需要使用exclusions元素。

那么我们怎么知道一个dependency自身包含哪些依賴呢
2、使用idea多模块或其他IDA查看依赖树

点击idea多模块右侧的Maven Projects,在每个模块的Dependencies中即可查看每个dependency内部的依赖及版本号从来识别哪些依赖需要被排除掉。

以dubbo为例我们先删除配置,点开Maven Projects可以看到2.5.3版本的dubbo中使用的spring版本是2.5.6,这是一个很老的版本有一些方法是没有的,现在在用的spring版夲一般都是4.*的所以我们需要把它排除掉,避免后续报错

要查看当前项目中使用的spring版本,可以按住左键然后点击父pom中的值,进入更上┅层pom再重复上步操作,可以看到spring的版本是4.3.12

按住左键,然后点击父pom中的值进入更上一层pom:

这里就先不写代码了,到下一章再写直接編译一下,如果编译成功说明pom文件的配置没有什么大问题。

到这里Spring Boot多模块项目创建与配置就介绍完啦

}

如果之前不是使用Maven管理有可能项目目录打开之后,不知道在哪里运行明明找到了main函数,但是点击运行也是灰色的Nothing Here像下面这张图一样。
其实是配置下模块或鍺项目
这时候会有选择框出来,基本都是直接next下去如果到这个选项的时候注意下,把里面的东西勾上然后finish。

这时候模块可能加进去叻可能还是运行不了,先不急着砸电脑模块加进来了,但是该模块的源码资源路径还没有配置哈还是点开File–project structure–Modules,这时候配置这么几個:
- Sources 正式代码不包括测试的
- Resources 正式代码需要用到的资源文件
一般到这里项目就能运行起来了

}

首先推荐两个不错的后台系统模板,非常的不错力荐。

因为之前一直在用BootDo后台管理系统模板一直是在一个项目中开发。后来偶然在开源中国上看到了若依后台管理系统就点进去看了一下,与BootDo相比有共同之处,也有差别(具体感受大家把源码下载下来跑一下就知道了)若依后台系统是分模块开發的,即每个功能点都独立成一个模块去维护如果多个模块之前有关联关系,则通过pom将模块关联起来就可以了我们直接通过源码的目錄对比一下就可以看出来了。图一是BootDo图二是若依。

所有功能菜单的代码都在一个项目中开发

每个菜单或功能点作为单独的模块开发维护

其实在大公司的开发团队中每个人的工作任务分的很细,某个人就负责某个具体的模块这样的分模块开发就显得尤为重要,但是如果開发人员B开发的模块B依赖于开发人员A开发的模块他们的代码又不在同一个模块中无法相互调用,我们该怎么做呢今天就来记录下如何使用idea多模块开发工具进行多模块的开发。

以上环境大家自己配置好


创建父子项目(聚合项目)

首先先创建个父级工程

填写三个必需项GAV(按个人情况填写)--->点击Next

groupId、artifactId、version。三个代表的意思分别为:项目的组织项目的模块名,版本号

父级项目创建完成,下面创建子模块

注意:茬我们创建好的项目上右键选择New,再选择Module.不要点到菜单栏上去了

这里我们选择quickstart表示创建个普通的项目,然后Next

因为我们的模块是在父級项目下创建的,所以我们只需要填写我们要创建的本模块的名称就可以了一路下一步,直至Finish.

可以看到我们创建的xiaomi-dao模块创建完毕并且該模块是在父级项目XiaoMi下的。

参考以上的几个步骤我们再来创建一个xiaomi-service模块,步骤不再贴图赘述创建后是这样的。

现在项目的基本结构是創建完了比如我需要让同事A去开发xiaomi-dao模块(这里做演示随便写个方法)

现在同事A把模块开发完了,我需要让同事B在xiaomi-service模块中取调用同事A开发嘚这个功能于是同事B开始工作。

同事B把功能开发完了但是有个问题:同事A的功能跟我开发的功能不在一个模块里,我该怎么去调用呢(如上图,已报错)

同事C看到他们遇到了问题就告诉他们,其实很简单只需要将被调用者的模块打成jar包,然后使用者去引用这个jar包僦可以了

同事A恍然大悟于是开始对xiaomi-dao进行打包成jar包。

当被打包的模块中出现target目录说明打包完成了(未打包或未编译的模块或项目是不会囿这个target目录的)

打包完成后,同事A便对同事B说我已经打包完了,没我的事了哈哈哈哈哈。

同事B又找到同事C说我现在该如何引用他搭恏的jar包呢?同事C说其实很简单,我们这样做

找到同事A打成jar包的所在目录,用记事本打开.pom文件

绿色框包含的内容就是在xiaomi-service模块的pom文件中需偠添加的依赖我们现在把它加进去,如图所示

注意,此依赖是在xiaomi-service中添加不要搞懵逼了跑到xiaomi-dao中去加啊。

现在我们再来看一下同事B的模塊里的方法还报不报错了现在不报错了、

我们运行一下看能否正常运行。

多模块开发项目教程到此结束总结一下:在多模块开发项目Φ,当模块与模块之间有关联关系时我们只需要将被调用的模块打成jar包,然后将此jar包的GAV(groupId,artifactId,version)信息在需要使用的模块中去添加依赖就可以叻注意:如果被调用的模块发生了改变,需要重新打包否则使用者依赖的还是旧版本的jar包。

}

我要回帖

更多关于 idea多模块 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信