SpringBoot 为当前最流行的JAVA框架 , 内嵌了 Tomcat 服务器 , 我们不用再像以前 Spring 那样打包成 war , 然后将 war 扔到 tomcat 中运行 。 我们现在可以直接将 SpringBoot 项目打包为一个内置 tomcat 的可运行 jar , 通过 java -jar xxx.jar 直接运行 (方便易用) 。

打包 SpringBoot 的方式有很多

  1. 使用 Maven打包 jar (主流)
  2. 使用各种开发工具打包Jar . 如 : idea , eclipse 等等 。

这里我们使用主流的Maven方式

1、在pom.xml中添加SpringBoot Maven插件 :
<!-- <build > 主要用于编译设置 -->
<build>
	<!-- 定义打包成jar的名字 -->
	<!-- 这里如果不定义 , 打包成的jar名字格式为 : <artifactId> + <version> -->
	<finalName>thymeleaf</finalName>
	<plugins>
		<!--SpringBoot maven插件-->
		<!-- 可以将应用打成一个可执行的jar包 -->
		<plugin>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-maven-plugin</artifactId>
			<!-- 设置启动入口 -->
			<!-- manClass即使不配置 , SprinBoot也在打包的时候也清楚入口是哪个 , 其实不用配置 -->
			<configuration>
				<mainClass>com.bella.ThymeleafApplication</mainClass>
			</configuration>
		</plugin>
	</plugins>
</build>
2、进入项目目录
  • 通过开发工具进入项目 (如 : idea Terminal)
  • 使用 Dos / Shell 进入项目目录

Spring Boot Maven 打包后 没有主清单属性 springboot maven打包配置_java

Spring Boot Maven 打包后 没有主清单属性 springboot maven打包配置_java_02

3、执行打包命令
mvn clean package -Dmaven.test.skip=true

Spring Boot Maven 打包后 没有主清单属性 springboot maven打包配置_后端_03


Spring Boot Maven 打包后 没有主清单属性 springboot maven打包配置_jar_04

Maven 打包成功后 , 可以通过控制台日志查看 Jar 的位置 . ( 如上图 )

  • Building jar : jar的绝对路径
4、运行jar
  1. 打开Dos控制台 (cmd)
  2. 进入 jar 目录 (cd jar绝对路径)
  3. 运行jar (java -jar xxx.jar)

Spring Boot Maven 打包后 没有主清单属性 springboot maven打包配置_maven_05

异常解决

1、 打包成功,运行jar报错 : 没有注清单属性

出现这种情况的原因 :
你的pom.xml 没有引入 SpringBoot Maven插件 . (第一步 在pom.xml中添加SpringBoot Maven插件 )

注意 : 即使你没有引入 SpringBoot Maven 插件也可以构建成功。是因为 maven 本身可以构建成功。但是Maven并不知道你的项目入口在哪里。这就是为什么要引入 SpringBoot maven 插件的原因。

2、打包失败

Spring Boot Maven 打包后 没有主清单属性 springboot maven打包配置_jar_06

这个错误的意思 :
maven 打包jar的时候是要覆盖之前的jar的。但是maven发现之前的jar正在被使用 , 无法进行删除覆盖操作。
解决办法 :
这种情况一般是因为此 jar 被打开 或者 被 启动中。 我们只要关闭了使用他的程序即可。 比如 : 关闭启动他的 DOS 窗口。 关闭打开他的压缩工具等等。

3、访问Action跳转View找不到

我这里使用的是 SpringBoot + thymeleaf . 当访问某个Action地址服务器进行视图跳转的时候报错 : 找不到该页面 .
比如 : 我访问 http://127.0.0.1:1118/index

Spring Boot Maven 打包后 没有主清单属性 springboot maven打包配置_jar_07


Spring Boot Maven 打包后 没有主清单属性 springboot maven打包配置_ide_08

导致这个错误的原因 :
SpringMVC 返回视图的时候 , 页面目录前面多加了一个 “/” 如 : return “/index”;

Spring Boot Maven 打包后 没有主清单属性 springboot maven打包配置_maven_09

像上面返回视图时多加了一个 “/”
你在用idea直接启动 SpringBoot 项目访问页面的时候没有问题
打包成 jar 访问就找不到页面

具体为什么 ? 没有细致研究。 反正去掉 “/” 就可以了。 也不影响idea的开发。

知识扩展

  • SpringBoot 启动命令大全
  • SpringBoot Maven 打包命令大全

项目源码