记一次初学者的spring boot 打包部署

2023-11-02

作为一个前端程序员,好不容易用第一次使用spring boot 写了一个项目,idea里面运行的ok,心里暗自窃喜。但是没想到打包就出现问题,折腾了一天,现在总结一下;

 

先看一下我的项目的结构:

这是我的项目,主项目是一个spring boot 项目,用来作为服务端。还有一个ArcFaceSDK模块,这是一个java模块,用来请求服务端。

 

先说一下ArcFaceSDK模块的打包:

这个比较简单,因为是一个java模块,所以打成jar包就可以了。

首先打开:

 

然后,选择artifacts 点击+

下一步:

下一步,在弹出的对话框中选择要打包的module,如果有mainClass 选择:

然后一路ok保存就好。

 

配置完成,接着就是执行打包。

build-->build Artifacts

 

 

然后 项目的目录下面就产生了这个jar:

 

到此,java模块打包成jar完成;

 

接着是主项目的打包:

首先说明一下 spring boot 项目是自带服务器的,这意味着你可以不依赖其他服务器(比如tomcat)运行。 当你自身运行的时候,只需要电脑上装有java环境即可。当然你也可以不使用自身的服务器。所以这个时候有两种打包方式:

1. 打包成jar, 自身运行;

2. 打包成war,依附于其他服务器运行;

这里介绍第一种。

 

maven 插件给我们提供了一种很简单的打包方式,就是使用插件自带的功能。

首先打开maven预览:

如果默认没有,可以使用这种方式打开:

 

打开后看到lifecycle下面的任务,我们打包需要的就是下面这两个,首先执行一下clean,然后执行一下package,就会生成了。

 

别着急,在生成之前我们需要对输出文件配置一下,因为是maven提供的打包,所以我们需要在pom里提供配置:

添加红色框里面的配置,意思是我们即将输出 jar包(也可以配置成war),下面就是jar包的名字和描述,最后生成的文件名会以name和上面的version拼接作为结果。

 

这时候我们依次点击一下 clean 和 package,生成文件如下:

 

项目启动:

cd 到jar所在的,目录,执行:

java -jar arcfaceserver-0.0.1-SNAPSHOT.jar

就可以了。

 

好,一般的项目到这里就基本完成了,但是我的启动的时候会报错误,很多Class 没找到。很快我发现了原因,因为我项目中引入了一个本地的jar包文件,而maven打包时没有将它打包进去。

 

解决办法就是吧本地jar依赖转化为maven依赖,在pom 中添加:

<!--加入本地依赖-->
<dependency>
   <groupId>com.arcsoft.face</groupId>
   <artifactId>arcsoft-sdk-face</artifactId>
   <version>2.2.0.1</version>
   <scope>system</scope>
   <systemPath>${project.basedir}/src/lib/arcsoft-sdk-face-2.2.0.1.jar</systemPath>
</dependency>

它在我项目中的真实目录为:

 

只添加了这个还不够,运行的时候还是找不到,查了很久,原来还要加上这句话:

附上代码:

    <build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
				<!--加入下面可以将本地jar打包进去 -->
				<configuration>
					<executable>true</executable>
					<includeSystemScope>true</includeSystemScope>
				</configuration>
			</plugin>
		</plugins>
	</build>

到此为止,我的本地jar包终于成功打包进去,运行项目正常。

 

到这里作为初学者还不是很完美,因为打包后的jar我门怎么动态修改端口号,数据库信息什么的呢?总不能每次修改重新打包啊,我的暂时的解决办法如下:

使用启动命令:

java -jar arcfaceserver-0.0.1-SNAPSHOT.jar --server.port=8084

上面的命令可以配置服务的端口号。

类似的还有下面的参数,这是在application.properties中的参数,都可以以上面的形式配置。

spring.datasource.url=jdbc:mysql://localhost:3306/faceDB
spring.datasource.username=root
spring.datasource.password=xxxxxxxxxxxx
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.max-idle=10
spring.datasource.max-wait=10000
spring.datasource.min-idle=5
spring.datasource.initial-size=5
# Specify the DBMS
spring.jpa.database = MYSQL
# Show or not log for each sql query
spring.jpa.show-sql = true
# Hibernate ddl auto (create, create-drop, update)
spring.jpa.hibernate.ddl-auto = update
# Naming strategy
spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy
# stripped before adding them to the entity manager
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect


#指定端口号
server.port=8082
#指定context path
#server.context-path=/test 被弃用
server.servlet.context-path=/arcfaceserver

 

当然,把所有参数都写进脚本文件中太不美观,还有一种非常优雅的方式:

在jar文件同级目录建立config文件夹,将application.properties 文件拷贝进去, 就 ok 了。

为什么? 这里拷贝别人的文章中的一段:

应用程序属性文件
  SpringApplication 将从 application.properties 以下位置的文件中加载属性并且将其添加到 Spring 的环境当中:

当前目录下的 /config 子目录
当前目录
classpath中的 /config 目录
classpath根目录

  该列表按照优先级的顺序排列(在列表中较高的位置定义的属性将会覆盖在较低位置定义的属性)。

  如果您不喜欢 application.properties 作为配置文件名,则可以通过指定 spring.config.name 环境属性来切换到另一个名称。还可以使用 spring.config.location 环境属性(以逗号分隔的目录位置列表或文件路径)引用显式位置。 
  比如:

java -jar myproject.jar --spring.config.name = myproject
1
java -jar myproject.jar --spring.config.location =
classpath:/default.properties,classpath:/override.properties
1
2
java -jar -Dspring.config.location=
D:\speech\default.properties analysis-speech-tool-0.0.1-SNAPSHOT.jar


 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

记一次初学者的spring boot 打包部署 的相关文章

随机推荐

  • 翻译:Tree Energy Loss: Towards Sparsely Annotated Semantic Segmentation

    目录 摘要 介绍 方法描述 1 树亲和生成 2 级联过滤生成伪标签 3 为未标记的像素分配伪标签 文章地址 Tree Energy Loss Towards Sparsely Annotated Semantic Segmentation
  • 【Blender小技巧】点对齐

    使用吸附功能实现 设置完之后 选择要移动的对象 按G移动该对象 然后移动光标到要对齐的顶点即可 需要先将对象移动到要对齐的顶点旁 然后再重新按G移动对象才能较为精确 G Z顶点对齐中间点
  • 微搭低代码学习之基础操作

    低代码开发平台 是一种方便产生应用程序的平台软件 软件会开发环境让用户以图形化接口以及配置编写程序 而不是用传统的程序设计作法 此平台可能是针对 某些种类的应用而设计开发的 例如数据库 业务过程 以及用户界面 这类平台可能可以产生完整且可运
  • 常见数据结构

    先激励激励自己 数据结构是指组织数据的方式 它是算法的基础 线性结构和非线性结构 线性结构 是一个有序数据元素的集合 它应该满足下面的特征 集合中必存在唯一的一个 第一个元素 集合中必存在唯一的一个 最后的元素 除最后一元素之外 其它数据元
  • 《算法系列》之刷题准备

    简介 这里是刷题会用到的一些准备工作 和一些注意事项 习惯的养成 我们在leetcode上写题时 代码输入框都会有模板 甚至还有需要用到的数据结构 优点是可以沉浸式的只关心代码逻辑的书写 缺点是 你面试的时候 只有一张白纸 让你用笔写代码时
  • MySQL中的索引index(超详细)

    概念 在MySQL中 索引 index 是一种特殊的数据结构 它能够加快数据库中数据的检索速度 索引可以看做是一本书的目录 它提供了一种快速查找数据的方式 MySQL中的索引是建立在一张表的一列或多列上的 用于加快对表中数据的查找速度 索引
  • Elasticsearch小记之sort

    今天在优化es查询语句时 发现了一个奇怪的问题 当我只是使用bool查询的时候 返回的结果中 max score 是有值的 当我在bool查询后面加上了sort sort requestTime order desc 返回的结果中 max
  • 房产置地管理系统

    一 介绍 房地产经纪人管理系统是一种专门设计用于帮助房地产经纪人和房地产经纪公司管理其业务的软件系统 该系统提供了一系列功能和工具 旨在简化和优化经纪人的日常工作流程 提高效率 并提供更好的客户服务 以下是一些常见的功能和特点 可以在房地产
  • JVM 新生代 8:1:1 原因

    GC是统计学测算出当内存使用超过98 以上时 内存就应该被minor gc时回收一次 但是实际应用中 我们不能较真的只给 他们留下2 换句话说当内存使用达到98 时才GC 就有点晚了 应该是多一些预留10 内存空间 这预留下来的空间我们称为
  • 怎样用Excel搜索表格内的内容?

    工具 材料 excel表格 1 首先在桌面上找到excel表格 并点击打开此表格 2 进入表格之后 点击表格左上角箭头指向的位置 将整个表格选中 3 然后ctrl f快捷键 将查找和替换功能窗口唤出 4 接着在查找内容的方框里输入需要查找的
  • 百度云智大会:科技与创新的交汇点

    这次的百度云智大会 可谓是亮点云集 发布了包含42个大模型 41个数据集 10个精选应用范式的全新升级千帆大模型平台2 0 发布首个大模型生态伙伴计划 而且也预告了文心大模型4 0的发布 大模型服务的成绩单也非常秀 月活企业数已近万家 覆盖
  • CUDA下载与对应版本查询

    文章目录 1 算力 CUDA Driver Version CUDA Runtime Version 2 显卡型号 3 实操 4 镜像 1 算力 CUDA Driver Version CUDA Runtime Version 比如说我们进
  • pythonmail添加附件_python3 发送邮件添加附件

    from email header import Header from email mime application import MIMEApplication from email mime multipart import MIME
  • 命令行编译WCE6.0 BSP 中 Private目录下的工程

    转载请标明是引用于 http blog csdn net chenyujing1234 参考文章 http social msdn microsoft com Forums en US windowsmobiledev thread 672
  • 漏洞复现之CVE-2015-1635-HTTP.SYS远程执行代码漏洞(ms15-034)

    1 1 1 漏洞描述 在2015年4月安全补丁日 微软发布的众多安全更新中 修复了HTTP sys中一处允许远程执行代码漏洞 编号为 CVE 2015 1635 MS15 034 利用HTTP sys的安全漏洞 攻击者只需要发送恶意的htt
  • 如何判断代码的好坏

    对于代码好坏的判断 是需要一定的标准来衡量 比如可读性 可维护性 可拓展性 简洁性等等 好的代码 无论是对于代码开发者来说 还是对于设备维护者来说都是赏心悦目的 而坏的代码则是让人一头雾水 心生胆怯 甚至在开发和维护阶段 因为修改或者重构代
  • select 语句中 if 的用法

    IF expr1 expr2 expr3 expr1 的值为 TRUE 则返回值为 expr2 expr1 的值为FALSE 则返回值为 expr3 例 SELECT IF TRUE 1 1 1 2 gt 2 SELECT IF FALSE
  • Oracle 高水位(watermark)实验

    oracle 中的高水位标记是 oracle table 中使用的术语 用于显示在 oracle table 的生命周期中曾经使用过的块 当您从表中删除行时 HWM 下面的块可能会变为空 但高水位标记将保持原样 假设您加载了 100 万行的
  • Hololens2开发笔记-Unity项目获取IMU传感器数据

    文章目录 前言 环境 使用指南 运行结果 前言 在仔细捣鼓了 HoloLens2 研究模式的 API 文档后 借鉴了官方案例 SensorVisualization 和这位哥们的代码 HoloLens2 Unity ResearchMode
  • 记一次初学者的spring boot 打包部署

    作为一个前端程序员 好不容易用第一次使用spring boot 写了一个项目 idea里面运行的ok 心里暗自窃喜 但是没想到打包就出现问题 折腾了一天 现在总结一下 先看一下我的项目的结构 这是我的项目 主项目是一个spring boot