深入Spring Boot :打包解决方案

最近有位网友私信我咨询一个SpringBoot项目打包的问题。

这位朋友说网络上有很多重复、不可用的技术文章,这个倒是事实,更糟糕的一些自媒体为了流量抄来抄去,增加我们查找解决方案的时间成本,我也尝试去搜索了一下“SpringBoot打包”,结果不尽人意,所以,总结了这篇打包解决方案。

基于SpringBoot开发的项目代码可以打包成可执行jar,也可以打包成war,这个视不同需求而定,下面以SpringBoot2.4.0版本为例,分别列举了不同使用方式下的jar和war打包操作。

构建可执行jar包

SpringBoot推荐将应用系统构建成可执行jar包,使用内置应用服务器运行项目代码。

继承 spring-boot-starter-parent

如果项目配置了pom继承spring-boot-starter-parent,就像下面这样:

此时要把项目代码打包成jar,需要在pom中配置packaging=jar,就是下面这样:

接着,使用finalName标签配置最终jar包的名字,然后配置spring-boot-maven-plugin插件,例如如下配置:

以上就是pom中的配置了,接下来执行jar打包操作,如果使用IDEA图形化工具打包,双击执行Maven窗口下Lifecycle中的package,即执行打jar包。

如果想通过执行mvn指令打jar,需要cd到源码根目录,即pom.xml所在的目录,然后执行mvn clean package,即执行打jar包。

不继承 spring-boot-starter-parent

如果项目pom文件没有继承spring-boot-starter-parent,要想将项目代码构建成可执行jar包,同样需要在pom中配置packaging=jar,就是下面这样:

接着,使用finalName标签配置最终jar包的名字,然后配置spring-boot-maven-plugin插件,这里不一样的是需要配置goal=repackage,例如如下配置:

以上就是pom中的配置了,接下来执行jar打包操作,如果使用IDEA图形化工具打包,双击执行Maven窗口下Lifecycle中的package,即执行打jar包;如果想通过执行mvn指令打jar,需要cd到源码根目录,即pom.xml所在的目录,然后执行mvn clean package,即执行打jar包。

构建可部署war包

如果需要将项目代码构建成war包,可参考如下两个不同的方式。不过需要注意,对于web应用,SpringBoot2.4使用Servlet3,所以war包需要部署在支持Servlet3的应用服务器上,例如tomcat8.0及以上版本。

继承 spring-boot-starter-parent

如果配置了项目pom继承spring-boot-starter-parent,就像下面这样:

此时要把项目代码打包成jar,需要在pom中配置packaging=war,就是下面这样:

接着,使用finalName标签配置最终war包的名字,然后配置spring-boot-maven-plugin插件,例如如下配置:

以上就是pom中的配置了,接下来执行war打包操作,如果使用IDEA图形化工具打包,双击执行Maven窗口下Lifecycle中的package,即执行打war包;如果想通过执行mvn指令打war,需要cd到源码根目录,即pom.xml所在的目录,然后执行mvn clean package,即执行打war包。

不继承 spring-boot-starter-parent

如果项目pom文件没有继承spring-boot-starter-parent,要想将项目代码构建成war包,同样需要在pom中配置packaging=war,就是下面这样:

接着,使用finalName标签配置最终war包的名字,然后配置构建war包需要使用到的插件,spring-boot-maven-plugin中同样需要配置goal=repackage,例如如下配置:

 
 
 <build>
	<finalName>demo</finalName>
	<plugins>
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-antrun-plugin</artifactId>
			<version>1.8</version>
		</plugin>
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-assembly-plugin</artifactId>
			<version>3.3.0</version>
		</plugin>
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-clean-plugin</artifactId>
			<version>3.1.0</version>
		</plugin>
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-compiler-plugin</artifactId>
			<version>3.8.1</version>
		</plugin>
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-dependency-plugin</artifactId>
			<version>3.1.2</version>
		</plugin>
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-deploy-plugin</artifactId>
			<version>2.8.2</version>
		</plugin>
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-enforcer-plugin</artifactId>
			<version>3.0.0-M3</version>
		</plugin>
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-failsafe-plugin</artifactId>
			<version>2.22.2</version>
		</plugin>
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-help-plugin</artifactId>
			<version>3.2.0</version>
		</plugin>
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-install-plugin</artifactId>
			<version>2.5.2</version>
		</plugin>
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-invoker-plugin</artifactId>
			<version>3.2.1</version>
		</plugin>
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-jar-plugin</artifactId>
			<version>3.2.0</version>
		</plugin>
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-javadoc-plugin</artifactId>
			<version>3.2.0</version>
		</plugin>
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-resources-plugin</artifactId>
			<version>3.2.0</version>
		</plugin>
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-shade-plugin</artifactId>
			<version>3.2.4</version>
		</plugin>
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-source-plugin</artifactId>
			<version>3.2.1</version>
		</plugin>
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-surefire-plugin</artifactId>
			<version>2.22.2</version>
		</plugin>
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-war-plugin</artifactId>
			<version>3.3.1</version>
		</plugin>
		<plugin>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-maven-plugin</artifactId>
			<version>2.4.0</version>
			<executions>
				<execution>
					<goals>
						<goal>repackage</goal>
					</goals>
				</execution>
			</executions>
		</plugin>
	</plugins>
</build>

以上配置中的插件版本号参考自SpringBoot2.4.0中的 spring-boot-dependencies-2.4.0.pom,它是spring-boot-starter-parent的父文件。

以上就是pom中的配置了,接下来执行war打包操作,如果使用IDEA图形化工具打包,双击执行Maven窗口下Lifecycle中的package,即执行打war包;如果想通过执行mvn指令打war,需要cd到源码根目录,即pom.xml所在的目录,然后执行mvn clean package,即执行打war包。

小结

从上述操作可以看到,是否继承spring-boot-starter-parent,打包配置还是有些不同的。因为spring-boot-starter-parent pom.xml中已经帮我们管理好了打包需要用到的spring-boot-maven-plugin插件和它需要依赖的其它插件,所以通过继承可以直接使用spring-boot-maven-plugin。有时,我们的项目有自己的parent pom.xml,此时没有继承spring-boot-starter-parent,那么如果还要想使用spring-boot-maven-plugin插件,就需要自定义管理它所依赖的maven插件。

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 这个错误表示你的 Maven 项目中没有找到名为 `spring-boot-maven-plugin` 的插件。这个插件是用来打包 Spring Boot 应用程序的,通常需要在 Maven 的 `pom.xml` 文件中进行配置。 你可以尝试在 `pom.xml` 文件中添加以下插件配置: ```xml <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>2.4.2</version> </plugin> </plugins> </build> ``` 确保将版本号替换为你正在使用的 Spring Boot 版本号。如果你已经加入了这个插件,那么检查一下版本是否正确或者是否有其他的插件配置错误。 ### 回答2: 出现这个错误的原因是在构建 Maven 项目时没有找到 `org.springframework.boot:spring-boot-maven-plugin` 插件。 `spring-boot-maven-plugin` 是一个 Maven 插件,用于构建和打包 Spring Boot 应用程序。它提供了一些功能,例如自动解决依赖关系、创建可执行的 JAR 文件等。 如果出现这个错误,可能是由于以下几个原因: 1. 未在 `pom.xml` 文件中添加正确的插件依赖。 您需要在 `pom.xml` 中添加以下依赖: ```xml <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> ``` 2. Maven 仓库中没有此插件的可用版本。 您可以通过执行以下命令来检查 Maven 仓库中是否有可用的 `spring-boot-maven-plugin` 版本: ``` mvn dependency:tree ``` 如果没有输出相关信息,可能是 Maven 仓库中没有可用的插件版本。您可以尝试更新 Maven 仓库或更换插件版本。 3. Maven 配置文件中的代理或防火墙问题。 如果您使用公司网络或受限制的网络连接,可能会阻止 Maven 下载插件。您可以尝试使用不受限制的网络连接,或者配置合适的代理设置。 如果您仍然无法解决这个问题,建议您查看 Maven 日志或搜索相关问题的解决方案,可以从 Stack Overflow 等开发者社区获得更多帮助。 ### 回答3: Plugin 'org.springframework.boot:spring-boot-maven-plugin:' not found 是指在 Maven 构建过程中找不到名为 spring-boot-maven-plugin 的插件。 spring-boot-maven-plugin 是 Spring Boot 提供的一个 Maven 插件,用于将 Spring Boot 应用打包成可执行的 JAR 文件。它提供了许多有用的功能,如自动重启、自动处理资源文件等。 如果在构建过程中出现该错误,有几种可能的原因和解决方法: 1. 检查 Maven 配置文件:首先要确保在 pom.xml 文件中正确地配置了 spring-boot-maven-plugin 插件。可以参考 Spring Boot 官方文档或其他教程,确保相关依赖和插件配置正确。 2. 检查 Maven 仓库:如果插件在仓库中不存在或者版本号错误,也会导致找不到插件。可以通过在 Maven 设置文件(settings.xml)中添加合适的仓库地址,以保证可以获取到正确的插件版本。 3. 清理和重新构建:有时候依赖包的缓存可能存在问题,可以尝试使用命令 mvn clean package 清理构建结果和依赖包,然后重新构建项目,看是否能够解决问题。 4. 检查网络连接:如果插件所在的远程仓库无法访问,也会导致找不到插件。可以检查网络连接是否正常,或者切换到其他可用的仓库地址。 总结来说,如果出现 Plugin 'org.springframework.boot:spring-boot-maven-plugin:' not found 错误,一般是插件配置不正确、仓库问题或者网络连接导致的。通过检查 Maven 配置文件、仓库设置、清理和重新构建等方式,可以解决这个问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值