序言:
前两篇博客给大家介绍了如何用maven搭建一个多模块的项目,包括整合mybatis。附上地址:
基础模块搭建:https://blog.csdn.net/bicheng4769/article/details/83387389
集合mybtais:https://blog.csdn.net/bicheng4769/article/details/83413726
经过前两篇博客的学习,我相信大家都已经知道如何搭建一个多模块的项目了,接下的代码都是在模块上进行增删改查之类的操作,当完成项目之后,我们需要将模块进行打包部署,那么maven多模块项目中的打包该如何操作呢?
打包jar包:
jar包时springboot推荐的打包方式,这种类型的文件直接java -jar 文件名 就可以直接运行。
-
添加maven插件:
首先第一步在项目的pom.xml文件中添加 maven插件:
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
都知道要添加插件,但关键在于添加在什么地方。我们可以想一想,最终我们需要打包的文件是什么?是web项目,所以我们将maven插件添加到web模块中(也就是除了根pom之外的,最顶级的模块pom文件)。
这里给大家解释下为什么不能放在父pom.xml文件中,首先我们来试一下放在父pom文件中会出现什么问题:[INFO] demo ............................................... SUCCESS [ 1.615 s] [INFO] demo-dao ........................................... FAILURE [ 2.496 s] [INFO] demo-service ....................................... SKIPPED [INFO] demo-web ........................................... SKIPPED [INFO] ------------------------------------------------------------------------ [INFO] BUILD FAILURE [INFO] ------------------------------------------------------------------------ [INFO] Total time: 4.845 s [INFO] Finished at: 2018-11-02T16:15:37+08:00 [INFO] Final Memory: 37M/335M [INFO] ------------------------------------------------------------------------ [ERROR] Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:2.0.6.RELEASE:repackage (default) on project demo-dao: Execution default of goal org.springframework.boot:spring-boot-maven-plugin:2.0.6.RELEASE:repackage failed: Unable to find main class -> [Help 1]
Unable to find main class
在父pom中声明插件之后,子模块都会继承插件(dependencyManagement
和dependencies
的区别)。所以在运行插件时,dao模块、service模块都是没有主函数,所以会报错。针对这种情况,其实是有方法去解决的,这里我就不介绍(其实是楼主不会。。。。。) -
运行哪个pom.xml 文件:
我都试了下,不管是web模块还是父模块都可以运行成功, 但我还是建议执行web模块中的pom进行打包。
-
文件在哪里:
文件最终在 web模块中的target目录下。
打包 war包:
-
父pom需要一些设置:
<packaging>pom</packaging>
-
web层添加maven插件,并且设置打包为war包:
<packaging>war</packaging> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
-
依赖包作为jar包打包:
其他模块中添加如下设置:
<packaging>jar</packaging>
-
去除springboot 内置tomcat服务器:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <!-- 移除嵌入式tomcat插件 --> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </exclusion> </exclusions> </dependency>
-
加入tomcat支持:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency>
-
修改启动类,将DemoApplication.java继承SpringBootServletInitializer并重写configure方法:
@SpringBootApplication() @MapperScan("com.cj.demo.dao") public class DemoApplication extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { return builder.sources(DemoApplication.class); } public static void main(String[] args) { SpringApplication.run(DemoApplication.class); } }
-
打包:
不管在总pom或者web层都可以进行到打包。
打包的war包都在web层的target文件下。复制粘贴到tomcat的webapps下启动就可以访问。
总结:
总体而言,maven分模块和maven不分模块进行打包基本没什么区别,jar包没什么好说的,都一样的。war包也就是去除tomcat服务器之类的配置,唯一需要注意的是在依赖的模块中需要加入<packaging>jar</packaging>
配置。仔细想想也挺有道理的,我们先把依赖的模块打包成jar包,然后在web模块中进行引入,然后再进行使用。
下载地址:
demo-war