本篇文章为你整理了SpringBoot 项目部署(初级)(springbootweb项目部署)的详细内容,包含有spring boot 项目部署 springbootweb项目部署 springboot部署流程 springboot项目部署到tomcat SpringBoot 项目部署(初级),希望能帮助你了解 SpringBoot 项目部署(初级)。
之前的项目一直在本地电脑上写,最近需要将项目部署到服务器上进行联调测速度。于是,在网上搜集资料后简单的进行一下总结。
之前的项目一直在本地电脑上写,最近需要将项目部署到服务器上进行联调测速度。于是,在网上搜集资料后简单的进行一下总结。
由于本次打包部署是为了测试,于是很多内容做的还不算详尽,只是将项目简单的打包为jar包。
1. SpringBoot 父子项目架构
可以看出,目前的父子项目架构主要划分为:
EEGSystem:父项目
eeg-analyze-web:子模块
sleep-stage-module:子模块,暂时作为启动类模块使用;
由于,目前项目的代码均在sleep-stage-modul模块中,另一个模块中还没有写代码。所以在后续打包过程中,将sleep-stage-module模块的启动类作为该项目的唯一入口(后面会解释什么是项目唯一入口)。
注意事项:父工程创建为Maven,启动类所在模块创建时一定要用SpringBoot项目,其他子模块创建时Maven、SpringBoot都可以
2. xml文件配置
2.1 父工程
父工程的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
groupId com.xxx.eegLab /groupId
artifactId EEGSystem /artifactId
version 1.0-SNAPSHOT /version
packaging的默认打包类型是jar
所有的父工程打包方式都需要设置成pom
packaging pom /packaging
!--该工程下的子模块名--
modules
module sleep-stage-module /module
module eeg-ayalyze-web /module
/modules
依赖配置:目前这里的配置的依赖所引入的jar包在此工程下的所有子工程都会被引入
dependencies
/dependencies
依赖管理:
这里的配置的依赖只是对依赖版本的管理配置,子工程并不会直接引入
如果子工程要需要引入只需要加入如下标签:
dependency
groupId mysql /groupId
artifactId mysql-connector-java /artifactId
/dependency
这样就可以引入mysql的驱动了,这样的好处就是可以在父工程统一一下整个工程的jar包依赖版本
而且如果有的工程不需要一些jar就可以不进行引入
dependencyManagement
/dependencyManagement
/project
主要有以下注意点:
父工程的打包方式必须为:pom;
必须在父工程中显式声明子工程模块;
父工程不可以引入:spring-boot-maven-plugin插件,否者这个插件就将传递到每一个子模块中,打包会出错;
2.2 子工程
2.2.1 启动类子工程
启动类子工程的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"
parent
artifactId EEGSystem /artifactId
groupId com.xxx.eegLab /groupId
version 1.0-SNAPSHOT /version
/parent
modelVersion 4.0.0 /modelVersion
artifactId sleep-stage-module /artifactId
packaging jar /packaging
dependencies
/dependencies
build
finalName main /finalName
plugins
plugin
groupId org.springframework.boot /groupId
artifactId spring-boot-maven-plugin /artifactId
version 2.4.1 /version
configuration
!-- 指定该Main Class为全局的唯一入口 --
mainClass com.xxx.eeglab.EegSystemApplication /mainClass
/configuration
executions
execution
goals
!--可以把依赖的包都打包到生成的Jar包中--
goal repackage /goal
/goals
/execution
/executions
/plugin
/plugins
/build
/project
主要有以下注意点:
在子工程中显式声明所属父工程;
必须在唯一启动类子工程中引入spring-boot-maven-plugin打包插件,并且要配置将所依赖的jar包全都打到这一包中;
其他子工程中不要引入spring-boot-maven-plugin ,否则将会每个工程都单独打成一个包,无法拉取到启动类所在包中;
2.2.2 其他子工程
其他子工程的配置文件如下所示:
点击查看代码
?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"
parent
artifactId EEGSystem /artifactId
groupId com.xxx.eegLab /groupId
version 1.0-SNAPSHOT /version
/parent
modelVersion 4.0.0 /modelVersion
artifactId eeg-ayalyze-web /artifactId
dependencies
/dependencies
/project
3. 打包
通过Maven,在父工程下依次选择:clean,package即可。
注意:虽然要将所有的jar都搭到main这个jar中,但是我们执行clean和package却是要对父工程进行;
此时,我们需要将sleep-stage-module下的main.jar移动到服务器上,然后运行:java -jar main.jar即可。
当然,这样操作是在命令行运行。一旦命令行关闭,那就停止运行了。我们可以通过nohup指令将程序提交到后台运行。
4. 可能出现的问题
如果按照上面的步骤来说,应该不会出现这个问题。但是,我第一次并没有按照上述步骤进行,而是按照另一个教程搞得。结果出现了下面的问题,简单记录一下:
4.1 没有主清单程序
在打包部署后,使用java -jar指令进行运行时,可能会出现:没有主清单程序 错误。
我们用压缩软件打开打包好的jar包,然后看到META-INF里面的MANIFEST.MF文件:
里面的内容应该是这样的:
Manifest-Version: 1.0
Spring-Boot-Classpath-Index: BOOT-INF/classpath.idx
Archiver-Version: Plexus Archiver
Built-By: 29687
Spring-Boot-Layers-Index: BOOT-INF/layers.idx
Start-Class: com.xxx.eeglab.EegSystemApplication
Spring-Boot-Classes: BOOT-INF/classes/
Spring-Boot-Lib: BOOT-INF/lib/
Spring-Boot-Version: 2.4.1
Created-By: Apache Maven 3.6.3
Build-Jdk: 1.8.0_202
Main-Class: org.springframework.boot.loader.JarLauncher
Main-Class :代表了Spring Boot中启动jar包的程序;
Start-Class :代表了Spring Boot程序的入口类,这个类中应该有一个main方法;
Spring-Boot-Classes :代表了类的路径,所有编译后的class文件,以及配置文件,都存储在该路径下;
Spring-Boot-Lib :表示依赖的jar包存储的位置;
这些值都是SpringBoot打包插件会默认生成的,如果没有这些属性,SpringBoot程序自然不能运行,就会报错:jar中没有主清单属性,也就是说没有按照SpringBoot的要求,生成这些必须的属性。
解决方法:在启动类子程序中添加:spring-boot-maven-plugin 应该就不会出问题了。
5. 参考
springboot项目父子多模块打包
Spring Boot:jar中没有主清单属性
以上就是SpringBoot 项目部署(初级)(springbootweb项目部署)的详细内容,想要了解更多 SpringBoot 项目部署(初级)的内容,请持续关注盛行IT软件开发工作室。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。