IntelliJ IDEA中基于Maven的多模块SpringBoot项目打包简易教程
前言
在项目开发完毕后就是打包部署环节了。java项目打包可以根据类型不同分为jar、war、ear
- jar,一般可以把类库、可执行程序、站点打包为jar。类库不具备可执行行,一般作为其他项目的依赖包使用,比如通用工具类可以单独打一个jar包。可执行程序中一般会在某个主类中包含程序入口方法,就是main方法,以前的带界面的java swing项目最终打包发布的jar都具有可执行行,一般双击jar文件就会运行程序。站点也可以打包为jar,一般都内嵌tomcat,也是目前springboot最常用的打包方式。
- war,war对应的是一个独立的java web项目,不会内嵌tomcat。
- ear,ear对应的是企业级java Bean,以前传统的大型分布式系统架构下的产物。ear的部署需要特定的应用服务器环境,比如JBoss、webshpere、WebLogic。Tomcat是不支持ear部署的。
基础java项目打jar包过程
1、首先打开IntelliJ IDEA,同时打开或新建一个javat项目。
2、在IntelliJ IDEA的顶部工具栏中点击图标Project Structure(Ctrl+Alt+Shift+S),打开Project Structure设置窗口,如下图:
3、在Project Structure设置窗口中选中左侧菜单中Project Settings->Artifacts,中间部分选择+号在弹出菜单中选择JAR->From modules with dependencies…,如下图:
4、在弹出的Create JAR from Modules窗口中选择要打包的模块和主类,如下图:
如果要把应用打包为单个jar文件,则选择extract to the target JAR
如果只是把依赖的jar文件复制到输出目录,而不是打包为单独的jar文件则选择copy to the output directory and link via manifest
5、点击Create JAR from Modules窗体中的OK按钮,回到Project Structure设置界面,如下图:
这里可以在Name后面修改jar包的名字。
输出目录确保是空的,如果里面有一个MANIFEST.MF文件,要先删除掉。
6、然后点击OK按钮。这样基本的设置就完毕了,然后就可以开始打包了,如果初次打包按照以下流程,选择IntelliJ IDEA顶部菜单Build->Build Artifacts…,如下图:
7、之后会弹出Build Artifact菜单项,首次编译选择Build,再次编译选择Rebuild。如下图:
8、编译完毕之后,在输出目录查看xxx.jar。
基于Maven的SpringBoot项目打包流程
在当前微服务架构大行其道的背景下,Docker容器部署是很多项目的首选。因此SpringBoot项目打为jar包进行部署就成为了最常用的打包方式。
在IntelliJ IDEA中配置Maven
1、在IntelliJ IDEA中配置Maven。一般在安装IDEA的时候会自带一个Maven,当然也可以自己安装一个Maven,这时就需要通过IDEA中配置指向自己安装的Maven。选择菜单File->Settings,如下图:
2、打开系统设置对话框,如下图:
- 在Maven home directory:项中可以选择是使用IDEA自带的Maven还是自己安装的,我这里就是选择的自带的。
- User settings file:项是用户设置文件的选择,默认是没有这个文件的,需要自己编写或复制一个到这个位置。
- Local repository:项是设置本地仓库的位置,就是项目依赖的jar文件下载后存放的位置。
3、settings.xml文件内容参考如下:
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<!--本地仓库。该值表示构建系统本地仓库的路径。其默认值为${user.home}/.m2/repository。 -->
<localRepository>C:\Users\zheng\.m2\repository</localRepository>
<pluginGroups>
</pluginGroups>
<proxies>
</proxies>
<servers>
</servers>
<mirrors>
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>
<mirror>
<id>jcenter</id>
<mirrorOf>central</mirrorOf>
<name>jcenter.bintray.com</name>
<url>http://jcenter.bintray.com/</url>
</mirror>
<mirror>
<id>repo1</id>
<mirrorOf>central</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://repo1.maven.org/maven2/</url>
</mirror>
<mirror>
<id>repo2</id>
<mirrorOf>central</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://repo2.maven.org/maven2/</url>
</mirror>
</mirrors>
<profiles>
</profiles>
</settings>
单模块Maven项目创建与打包
1、新建基于Maven的SpringBoot项目,在工程根目录下会生成pom.xml,创建过程此处省略。
pom.xml文件中通常包含以下内容:
<?xml version="1.0" encoding="UTF-8"?>
<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>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.6.RELEASE</version>
</parent>
<groupId>com.xxx</groupId>
<artifactId>gauss</artifactId>
<packaging>jar</packaging>
<version>0.0.1-SNAPSHOT</version>
<properties>
</properties>
<dependencies>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<fork>true</fork>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.21.0</version>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
</plugins>
<finalName>equipment_management</finalName>
<resources>
<resource>
<directory>src/main/resources</directory>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</build>
</project>
2、在项目开发完毕后要想打包部署则可以点击IntelliJ IDEA右侧的Maven导航项会展开Maven面板,如下图:
在Maven面板中可以看到项目名称Lifecycle有Maven的基本参数项:
- clean,清除编译。
- validate,验证工程是否正确,所有需要的资源是否可用。
- compile,编译源码。
- test,编译并测试源码。
- package,只打包成jar,并不会发送到本地仓库。
- verify,运行任何检查,验证包是否有效且达到质量标准。
- install,打包并发送到本地仓库。
- site,生成项目文档。
- deploy,打包并发送到远程仓库。
如果通过命令方式执行,则需要在项目目录下执行mvn命令,举例如下:
mvn clean
mvn compile
mvn package
当然了,在IntelliJ IDEA中,我们可以直接通过Maven面板顶部的工具栏按钮Run Maven Build执行相应的命令,如下图:
从上图可以可以看出,如果我们把maven项目打包成jar,则选中项目声明周期下的package,然后点击Run Maven Build按钮就可以了。这时就会在底部控制台窗口中显示打包日志,如下图:
出现BUILD SUCESS就说明打包成功了。这样在工程的target目录下就可以看到相应的jar文件了。
多模块Maven项目打包要点
多模块Maven项目的打包与单模块Maven项目打包类似,但是有一些要点要注意,如下:
- 在多模块的Maven项目中请直接对工程pom.xml进行整理打包,也就是对顶层模块执行打包操作。
- 在多模块的Maven项目中不要出现各模块互相依赖的情况。
- 在多模块的Maven项目中如果对某个模块进行单独打包,那么要先对这个模块所依赖的模块进行打包,并上传maven仓库才行。
- 为了避免把测试代码打包到jar或war中,在执行Run Maven Build之前请先执行Toggle ‘Skip Tests’ mode操作,如下图: