springboot的多模块构建

今天自己学习了一手springboot多模块构建,下面就简单的记录一下

方式一

首先就是项目右键新建一个Module

springboot多模块1

选择Maven

springboot多模块2

然后自己定义artifactId,最后finish

springboot多模块3

完成上面你就可以看到你的项目下新增了一个模块,如下图

springboot多模块4

项目根目录的pom下也会出现相应的modules

springboot多模块5

具体要创建多少的模块就根据实际项目的需求来进行创建,创建完毕之后就可以把之前src路径下的文件copy过去,注意需要把你之前创建的package也一并copy创建,在此过程中IDEA可能会出现警告,是因为依赖关系的原因,出现这个问题就先continue,没关系,后面会进行解决

完成上面一部之后,还需要在每个对应模块的pom引入对应的依赖,具体根据你copy的类来进行引入,引入完毕之后,开始构建依赖,比如我这的server要依赖于common,那我就可以在server下的pom建立和common的依赖,在pom文件中:

<dependency>
	<groupId>com.imooc</groupId>
        <artifactId>common</artifactId>
        <version>0.0.1-SNAPSHOT</version>
</dependency>

这样就可以跟common模块构建了关联,可以引入common中定义的一些类

至此就已经完成了项目中的多模块构建,接下来就是项目打包

通常下我们有两种打包方式 jar 或者 war

首先我们进行jar的打包构建

这时候如果我们之后运行maven进行打包会报错,报什么错呢

springboot多模块6

找不到入口文件,当然因为我们要把启动类放到我们自己构建的某个模块下,我这里就放到了server下,那既然找不到入口文件,我们就在加上入口文件呗

<configuration>
	<mainClass>com.imooc.product.ProductApplication</mainClass>
</configuration>

加入了之后我们进入打包,发现又报了别的错误

springboot多模块7

这是他说去尝试下载了我们的这个包,但其实这是不对的,当然这其实也是一个错误的打包示范

<dependencies>
	<dependency>
		<groupId>com.imooc</groupId>
		<artifactId>common</artifactId>
		<version>0.0.1-SNAPSHOT</version>
	</dependency>
</dependencies>

我把完整的代码片段也粘贴一下

<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <mainClass>com.imooc.product.ProductApplication</mainClass>
                </configuration>
            </plugin>
        </plugins>
    </build>

继续打包还是会报错,其实是我们不应该在项目根路径下的pom中进行配置,我们的启动类都已经被移动了,那就应该到这个启动类所在的模块下的pom中进行配置

所以,我们把刚刚配置的代码cut到server(以我的为例)下的pom中

<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <mainClass>com.imooc.product.ProductApplication</mainClass>
                </configuration>
            </plugin>
        </plugins>
    </build>

至此,我们再进行打包

springboot多模块-jar1

打包成功!可以cd 到目录在 java -jar xxx.jar 运行测试

接下来就打包war,war包我们需要在pom中加入

<packaging>war</packaging>

因为默认是打成jar包的,所以我们需要加入这一的一句,另外因为是war包,我们需要在创建web.xml配置文件

springboot多模块-war1

再进行打包构建

springboot多模块-war2

打包成功,也可以cd到项目目录下进行运行测试

大功告成~

有什么问题请批评指正~

方式二

------2019.11.30

补充

server模块:所有业务逻辑

client模块:对外暴露的接口

common模块:公用对象

server,client依赖于common

再主模块的pom中添加packaging和modules

<packaging>pom</packaging>
<modules>
	<module>client</module>
	<module>common</module>
	<module>server</module>
</modules>

刚写完肯定是抛红,因为她不存在,这个时候就可以创建啦,他会为我们自动创建:

springboot的多模块构建22

创建完之后是这样的:

springboot的多模块构建23

红色框处的部分可以删去,因为在parent中已经存在了,并且没有的话也是会按照parent中保持一致的

这时候把主模块中的src全部移动到server下,把主项目下的pom文件依赖也全部copy到server下的pom中去,还有build部分也要copy过去

因为分模块开发中这样的名称可能会同名,为了方便区分,在子模块的pom下更改标签的名称,如下,具体按照自己实际开发定义

<artifactId>order-client</artifactId>

比如在server、client中都需要调用common的类,那么就需要导入common的依赖,并且还需要导入指定的版本,为了后续方便维护,在主模块的pom文件中,在**标签汇总配置版本,在**标签中加入common的依赖,如:

<properties>
	<order-common.version>0.0.1-SNAPSHOT</order-common.version>
</properties>

<dependencyManagement>
	<dependency>
		<groupId>com.cloud</groupId>
		<artifactId>order-common</artifactId>
		<version>${order-common.version}</version>
		</dependency>
	</dependencies>
</dependencyManagement>

这样配置之后在子模块中调用就可以不再指定版本去调用了,因为在主模块中已经全局配置好了,这样也是方便日后项目的维护。

在common、client两个模块中要创建类之前需要先给他们创建好路径,只能一级一级创建:

src -> main -> java(Sources root) -> com.xxx.xxx.common(client)

(Sources root) 就是设置为java程序块,在java文件夹上右键Mark Directory as --> Sources root

最主要的就是刷新pom文件

最主要的就是刷新pom文件

最主要的就是刷新pom文件

这些工作都做完之后需要修改springboot的启动类,你的启动类在哪个子模块下就选择那个,我这边就是order-server。

命令:mvn -Dmaven.test.skip=true -U clean install

就是把这些包打在本地Maven仓库,这样在开发阶段就可以引入了

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐