Spring Boot创建可执行jar包的实例教程

传统的spring项目,可能大部分都要部署到web容器中,如Tomcat。Spring Boot提供了一种超级简单的部署方式,就是直接将应用打成jar包,在生产上只需要执行java -jar就可以运行了。

本篇文章就介绍如何创建可执行jar包,以及如何部署、运行和停止。

第一步,我们需要在pom.xml添加spring-boot-maven-plugin,添加在dependecies部分下面:

<build>
  <plugins>
    <plugin>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-maven-plugin</artifactId>
    </plugin>
  </plugins>
</build>

第二步,保存pom.xml并运行mvn package命令打包:

localhost:spring-boot-tutorial-executable majunwei$ mvn package -Dmaven.test.skip=true
[INFO] Scanning for projects...
[WARNING]
[WARNING] Some problems were encountered while building the effective model for com.majunwei:spring-boot-tutorial-executable:jar:0.0.1-SNAPSHOT
[WARNING] 'parent.relativePath' of POM com.majunwei:spring-boot-tutorial-executable:0.0.1-SNAPSHOT (/Users/majunwei/Documents/work/spring-boot-tutorial/spring-boot-tutorial-executable/pom.xml) points at com.majunwei:spring-boot-tutorial instead of org.springframework.boot:spring-boot-starter-parent, please verify your project structure @ line 6, column 10
[WARNING]
[WARNING] It is highly recommended to fix these problems because they threaten the stability of your build.
[WARNING]
[WARNING] For this reason, future Maven versions might no longer support building such malformed projects.
[WARNING]
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building spring-boot-tutorial-executable 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ spring-boot-tutorial-executable ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /Users/majunwei/Documents/work/spring-boot-tutorial/spring-boot-tutorial-executable/src/main/resources
[INFO] skip non existing resourceDirectory /Users/majunwei/Documents/work/spring-boot-tutorial/spring-boot-tutorial-executable/src/main/resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ spring-boot-tutorial-executable ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ spring-boot-tutorial-executable ---
[INFO] Not copying test resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ spring-boot-tutorial-executable ---
[INFO] Not compiling test sources
[INFO]
[INFO] --- maven-surefire-plugin:2.18.1:test (default-test) @ spring-boot-tutorial-executable ---
[INFO] Tests are skipped.
[INFO]
[INFO] --- maven-jar-plugin:2.6:jar (default-jar) @ spring-boot-tutorial-executable ---
[INFO]
[INFO] --- spring-boot-maven-plugin:1.5.6.RELEASE:repackage (default) @ spring-boot-tutorial-executable ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.380 s
[INFO] Finished at: 2017-08-04T12:01:52+08:00
[INFO] Final Memory: 21M/227M
[INFO] ------------------------------------------------------------------------

这样就完成了打包操作,大好的包保存在target目录里。应该在10MB左右。

localhost:target majunwei$ ls -lh
total 28232
drwxr-xr-x 4 majunwei staff  136B 8 4 11:12 classes
drwxr-xr-x 3 majunwei staff  102B 8 4 11:14 generated-sources
drwxr-xr-x 3 majunwei staff  102B 8 4 11:14 maven-archiver
drwxr-xr-x 3 majunwei staff  102B 8 4 11:14 maven-status
-rw-r--r-- 1 majunwei staff  14M 8 4 11:14 spring-boot-tutorial-executable-0.0.1-SNAPSHOT.jar
-rw-r--r-- 1 majunwei staff  3.2K 8 4 11:14 spring-boot-tutorial-executable-0.0.1-SNAPSHOT.jar.original
drwxr-xr-x 3 majunwei staff  102B 8 4 11:12 test-classes

这个包里包含了依赖的jar包、classes等信息,如果你想仔细查看这个jar包等内容,你可以使用jar tvf命令,或解压出来看:

$ jar tvf spring-boot-tutorial-executable-0.0.1-SNAPSHOT.jar

target目录里还有个非常小的myproject-0.0.1-SNAPSHOT.jar.original文件。这个是Spring Boot打包之前Maven创建的原始jar文件。

第三步,使用java -jar命令,运行应用:

localhost:target majunwei$ java -jar spring-boot-tutorial-executable-0.0.1-SNAPSHOT.jar

 .  ____     _      __ _ _
 /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/ ___)| |_)| | | | | || (_| | ) ) ) )
 ' |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::    (v1.5.6.RELEASE)

2017-08-04 12:05:58.917 INFO 909 --- [      main] o.s.b.tutorial.executable.Application  : Starting Application v0.0.1-SNAPSHOT on localhost with PID 909 (/Users/majunwei/Documents/work/spring-boot-tutorial/spring-boot-tutorial-executable/target/spring-boot-tutorial-executable-0.0.1-SNAPSHOT.jar started by majunwei in /Users/majunwei/Documents/work/spring-boot-tutorial/spring-boot-tutorial-executable/target)
2017-08-04 12:05:58.926 INFO 909 --- [      main] o.s.b.tutorial.executable.Application  : No active profile set, falling back to default profiles: default
2017-08-04 12:05:59.039 INFO 909 --- [      main] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@27f8302d: startup date [Fri Aug 04 12:05:59 CST 2017]; root of context hierarchy
2017-08-04 12:06:01.030 INFO 909 --- [      main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat initialized with port(s): 8080 (http)
2017-08-04 12:06:01.050 INFO 909 --- [      main] o.apache.catalina.core.StandardService  : Starting service [Tomcat]
2017-08-04 12:06:01.053 INFO 909 --- [      main] org.apache.catalina.core.StandardEngine : Starting Servlet Engine: Apache Tomcat/8.5.16
2017-08-04 12:06:01.224 INFO 909 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/]    : Initializing Spring embedded WebApplicationContext
2017-08-04 12:06:01.225 INFO 909 --- [ost-startStop-1] o.s.web.context.ContextLoader      : Root WebApplicationContext: initialization completed in 2199 ms
2017-08-04 12:06:01.430 INFO 909 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean : Mapping servlet: 'dispatcherServlet' to [/]
2017-08-04 12:06:01.437 INFO 909 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean  : Mapping filter: 'characterEncodingFilter' to: [/*]
2017-08-04 12:06:01.437 INFO 909 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean  : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
2017-08-04 12:06:01.438 INFO 909 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean  : Mapping filter: 'httpPutFormContentFilter' to: [/*]
2017-08-04 12:06:01.439 INFO 909 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean  : Mapping filter: 'requestContextFilter' to: [/*]
2017-08-04 12:06:01.890 INFO 909 --- [      main] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@27f8302d: startup date [Fri Aug 04 12:05:59 CST 2017]; root of context hierarchy
2017-08-04 12:06:02.019 INFO 909 --- [      main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/]}" onto java.lang.String org.spring.boot.tutorial.executable.Application.home()
2017-08-04 12:06:02.024 INFO 909 --- [      main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest)
2017-08-04 12:06:02.024 INFO 909 --- [      main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)
2017-08-04 12:06:02.062 INFO 909 --- [      main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2017-08-04 12:06:02.062 INFO 909 --- [      main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2017-08-04 12:06:02.129 INFO 909 --- [      main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2017-08-04 12:06:02.344 INFO 909 --- [      main] o.s.j.e.a.AnnotationMBeanExporter    : Registering beans for JMX exposure on startup
2017-08-04 12:06:02.448 INFO 909 --- [      main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http)
2017-08-04 12:06:02.458 INFO 909 --- [      main] o.s.b.tutorial.executable.Application  : Started Application in 4.054 seconds (JVM running for 4.622)

第四步,跟之前一样,想要退出应用,按ctrl-c就可以了。

下载本教程的源代码

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

您可能感兴趣的文章:

  • 详解spring boot引入外部jar包的坑
  • spring boot 部署为jar包的方法示例
  • spring boot实战之本地jar包引用示例
  • spring boot打包成可执行jar包
  • spring boot加载第三方jar包的配置文件的方法
  • 详解springboot解决第三方依赖jar包的问题
(0)

相关推荐

  • spring boot 部署为jar包的方法示例

    前言 一直在ide中敲代码,使用命令行 mvn spring-boot:run 或者 gradlew bootRun 来运行spring boot项目.想来放到prod上面也应该很简单.然而今天试了下,各种问题.最大错误是1.4的bug: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jp

  • spring boot打包成可执行jar包

    在使用spring boot进行打包的时候出现了一些问题,不是说找不到主类,就是说spring初始化时有些类没有加载. 下面介绍一下如何解决. <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> &

  • spring boot加载第三方jar包的配置文件的方法

    前言 今天收到一封邮件,大概内容如下:spring boot鼓励去配置化,那么怎么将第三方jar包中的xml去配置化了? 其实,这个问题,在前面的文章中也有提到,http://www.jb51.net/article/125700.htm 下面,我们就以Quartz定时任务为例,单独对这个问题来进行说明,如何实现去配置化. 如果不使用spring boot,我们配置一个简单的定时任务时,需要引入以下配置文件: <!-- 配置需要定时执行的任务类以及方法 --> <bean id=&quo

  • 详解springboot解决第三方依赖jar包的问题

    公司现在用的是springboot+maven,想要把一些老的项目都改成这种框架.但是一些老的项目中有好多第三方的jar包或者是自己的jar包,maven库上没有.最初的解决方案是一个个的deploy到maven库上,但是遇到太多的三方jar包就太费事了.网上查了一下发现maven有一种方式可以将本地的Jar包依赖到项目中而不需要先deploy到maven库上.具体做法如下: 跟普通的java项目一样,新建个lib目录放jar包,我建在了src下. pom文件中依赖这样写: <!--添加外部依赖

  • spring boot实战之本地jar包引用示例

    部分情况下无法通过maven仓库直接下载需要的jar包,只能讲jar包下载至本地来使用,spring boot框架内通过maven加载第三方jar包可以通过以下方式来实现(本地jar放在lib/目录下),项目会打包为jar包来运行. 1.添加maven依赖 <dependency> <groupId>org.ansj</groupId> <artifactId>ansj_seg</artifactId> <version>3.0<

  • 详解spring boot引入外部jar包的坑

    前言:由于项目需求,短信验证码的接口需要换成阿里大于的,但是尴尬的发现阿里大于的jar包没有maven版本的,于是便开始了一上午的操蛋引包之路.按照套路来说,自然应该是百度一波,但是百度了好久,找了好多方案之后发现,没一个有用的,而且文章的抄袭.拷贝十分严重,试了N种方案,都是错的,都没有将外部jar包打包到BOOK-INF文件夹下.最终,在第N次尝试之后,终于在打的jar包里将外部的jar包导入进来.特此记录下,防止再犯!!! 首先在新建libs文件夹(根目录或者resource目录下都可以)

  • Spring Boot创建可执行jar包的实例教程

    传统的spring项目,可能大部分都要部署到web容器中,如Tomcat.Spring Boot提供了一种超级简单的部署方式,就是直接将应用打成jar包,在生产上只需要执行java -jar就可以运行了. 本篇文章就介绍如何创建可执行jar包,以及如何部署.运行和停止. 第一步,我们需要在pom.xml添加spring-boot-maven-plugin,添加在dependecies部分下面: <build> <plugins> <plugin> <groupId

  • Spring Boot创建非可执行jar包的实例教程

    我们经常会有这种场景,只需要把Spring Boot打成普通的jar包,不包含配置文件,供其他程序应用 本文介绍如何使用Maven将Spring Boot应用打成普通的非可执行jar包. 配置maven-jar-plugin <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugi

  • Spring Boot项目添加外部Jar包以及配置多数据源的完整步骤

    前言 最近项目需要和Oracle数据库进行交互,然后我从Maven中央仓库下载数据库驱动jar包,但怎么都下不下来,我到Oracle官网上一看,我去,居然不让用Maven直接下(大学时候用过Oracle,很久远的事情了0rz),没办法我还是直接下载jar包放到我的项目里面吧.SpringBoot项目引入外部jar包是非常方便的,包含打引入外部jar等操作. 我的做法如下: 首先在src同级目录建一个lib文件夹,将第三方jar包放到这个文件内,比如我将ojdbc6.jar 这个jar包放到这个地

  • Linux下用java -jar运行可执行jar包的方法教程

    问题来源 一般来说,一个稍微大些的项目都会有一些依赖的Jar包,而在将项目部署到服务器的过程中,如果没有持续集成环境的话,也就是说服务器不支持在线编译及打包,那么需要自己上传依赖的Jar包,然而可能服务器上已经存在了该项目所依赖的Jar包(比如项目修复BUG,重新打包上传,而依赖不变),无需再次上传,此时只需将该项目单独打包,在运行的时候指定CLASSPATH即可. 在将Jar包部署到服务器上之后,设置CLASSPATH环境变量,运行Java -jar ...命令出现ClassNotFoundE

  • Maven 项目用Assembly打包可执行jar包的方法

    目录 1.添加maven插件 2.mvn clean(清理下项目) 3.maven update project(用eclipse工具) 4.命令后执行命令mvn assembly:assembly -Dmaven.test.skip 5.执行 java -jar DataCollector.jar 该方法只可打包非spring项目的可执行jar包 1.添加maven插件 <build> <finalName>DataCollector</finalName> <

  • Eclipse创建java程序可执行jar包教程

    一.eclipse中,在要打成jar包的项目名上右击,出现如下弹出框,选择"export": 二.在接下来出现的界面中点击"jar file",然后next: 三.在接下来出现的界面中,如图所示勾选上要打包的项目以及其他选项,例如test项目:然后点击右边箭头所指的browse,选择打好的jar包要保存的目录,同时给自己的jar包命名,例如我这里选择存放在桌面,名字为jarTest;然后点击"next",在之后弹出的界面中再点击一次"n

  • 利用Spring Boot创建docker image的完整步骤

    前言 在很久很久以前,我们是怎么创建Spring Boot的docker image呢?最最通用的办法就是将Spring boot的应用程序打包成一个fat jar,然后写一个docker file,将这个fat jar制作成为一个docker image然后运行. 今天我们来体验一下Spring Boot 2.3.3 带来的快速创建docker image的功能. 传统做法和它的缺点 现在我们创建一个非常简单的Spring Boot程序: @SpringBootApplication @Res

  • Spring Boot如何通过java -jar启动

    Pre 大家开发的基于Spring Boot 的应用 ,jar形式, 发布的时候,绝大部分都是使用java -jar 启动. 得益于Spring Boot 的封装 , 再也不用操心搭建tomcat等相关web容器le , 一切变得非常美好, 那SpringBoot是怎么做到的呢? 引导 新建工程 打包 启动 我们新创建一个Spring Boot的工程 其中打包的配置为 <build> <plugins> <plugin> <groupId>org.sprin

随机推荐