SpingBoot 改造为 Maven 多模块项目 并打包为 war 文件

第一步:创建父项目

File->New->Maven Project
在这里插入图片描述
选择创建一个简单工程
在这里插入图片描述

点击Next,在下一步中,Group Id 和 Artifact Id 可以根据项目情况任意填写,Packaging需要设置为POM
在这里插入图片描述
新创建的项目中,需要把src删了,父项目的内容应该由模块自动填充
在这里插入图片描述

第二步:创建子模块

选中父项目,右键,New->Project
在这里插入图片描述
选择创建一个 Maven Module
在这里插入图片描述
在这里我名字写的是csdn-service
在这里插入图片描述
同样的方法,创建 csdn-controller 模块
在这里插入图片描述

第三步:开始改造

这是我的原springboot项目,在 https://start.spring.io/ 生产的Maven Project的基础上编码的
在这里插入图片描述
我们先把原springboot项目的pom.xml里下面三个元素复制给父项目的pom.xml
在这里插入图片描述
注意不需要复制build, build应该只配置给controller
在这里插入图片描述
这是父项目复制完成后的pom.xml , 这里 <modules>元素是刚才创建模块时自动生成的

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>net.logicforeach</groupId>
  <artifactId>csdn-parent</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>pom</packaging>
  <modules>
  	<module>csdn-service</module>
  	<module>csdn-controller</module>
  </modules>
  
  <parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.0.5.RELEASE</version>
		<relativePath /> <!-- lookup parent from repository -->
	</parent>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-jpa</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-devtools</artifactId>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-tomcat</artifactId>
			<scope>provided</scope>
		</dependency>


		<!-- jjwt -->
		<dependency>
			<groupId>io.jsonwebtoken</groupId>
			<artifactId>jjwt-api</artifactId>
			<version>0.10.5</version>
		</dependency>
		<dependency>
			<groupId>io.jsonwebtoken</groupId>
			<artifactId>jjwt-impl</artifactId>
			<version>0.10.5</version>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>io.jsonwebtoken</groupId>
			<artifactId>jjwt-jackson</artifactId>
			<version>0.10.5</version>
			<scope>runtime</scope>
		</dependency>
	</dependencies>
</project>

将原springboot项目里的包复制到相应模块,如下面选中部分应该复制到service模块中(这里为了演示,将model与dao都复制给了service,实际项目中视情况决定是否开辟新的模块),对了,别忘记更新maven项目
在这里插入图片描述
eclipse中,选中父项目创建的模块,会自动继承父项目,这里service模块继承了父项目的依赖,所以不会报错
在这里插入图片描述
将其余包复制给controller模块
在这里插入图片描述
我们发现controller有报错,这是因为我们没还没有配置模块间的依赖关系,显然controller模块是依赖service模块的,所以我们需要在controller模块的pom.xml配置

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>net.logicforeach</groupId>
		<artifactId>csdn-parent</artifactId>
		<version>0.0.1-SNAPSHOT</version>
	</parent>
	<artifactId>csdn-controller</artifactId>
	<dependencies>
		<dependency>
			<groupId>net.logicforeach</groupId>
			<artifactId>csdn-service</artifactId>
			<version>0.0.1-SNAPSHOT</version>
		</dependency>
	</dependencies>
	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>
</project>

注意: <parent> 元素是由eclipse在创建创建模块时自动创建的,每一个子模块都会自动继承父项目的pom , <build> 复制自原springboot项目的pom.xml,因为service模块最后只需要输出个jar供controller模块调用就好,而controller模块则需要按照springboot的规矩去生成war,所以这里要在controller模块单独填上<build> 元素,如果把这个元素写在了父项目的pom.xml会导致找不到主类而打包失败

别忘记将配置文件也复制到controller模块
在这里插入图片描述
至此已经改造完成,运行下启动类,看看有没有啥问题,我这项目用启动类启动成功了,应该没啥问题了,下一步就是研究研究怎么打包成war了
在这里插入图片描述

第四步:打包成war

此时,打包成war也没啥特殊的,只需要对controller模块进行修改即可,和spring项目打包成war的方法类似,依旧是三步走

修改pom.xml 将打包方式设置为 war

在这里插入图片描述

改变依赖范围 , 屏蔽内置Tomcat插件

controller模块或父项目的模块的pom.xml中加入这个依赖

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-tomcat</artifactId>
	<scope>provided</scope>
</dependency>

修改启动类,继承并重写

在这里插入图片描述

第五步:开始打包

点击父项目,右键->Run as-> Maven build
在这里插入图片描述
在这里插入图片描述
run! 没毛病
在这里插入图片描述
F5一下,可以看到已经打包成war了
在这里插入图片描述

一些个人理解

显然maven的多模块提高了各个模块的重用率,在良好的习惯和统一的规范下,可以加快开发速度,下面是我对<modules>元素的一些理解.

  • <modules> 不是必须的 , 事实上仅通过继承,也能实现一个项目引用另一个项目, 但是会出现很多问题, 比如spring的autowrited找不到对应的bean,jar包被重复引用,也就是说不用<modules>,两个模块的资源不会共享,各玩各的…
  • <modules>模块可以将各个模块聚合在一起,虽然在此例中,我们只需要对父项目进行打包操作,但maven会在经过拓扑排序后,依次将子模块打包,如果不用<modules>元素,我们可能需要手动为每个模块打包
  • 父项目聚合多模块的模式,既为我们通过了宏观的视角,也允许我们微观的修改,在父项目中,我们可以看到所有模块的内容都以文件夹的形式存在于父项目中,但是这不是利于编程的视角,我们可以把每个模块当做一个单独的项目去修改,在eclipse中,模块与父项目的导航是在同一级的,外面的修改会同步父项目内的修改,反之是.
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值