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

本文详细介绍了SpringBoot项目及附加Java模块的打包过程,包括Maven插件的使用,本地jar包的依赖处理,以及如何动态配置端口和数据库信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作为一个前端程序员,好不容易用第一次使用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


 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龍林1102

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值