前言

  Spring Boot支持传统部署和更现代的部署形式。jar跟war都支持,这里参考springboot参考手册学习记录

  传统部署:https://docs.spring.io/spring-boot/docs/2.1.6.RELEASE/reference/html/howto-traditional-deployment.html

  更现代的部署:https://docs.spring.io/spring-boot/docs/2.1.0.RELEASE/reference/htmlsingle/#getting-started-first-application-executable-jar

jar 和 war 包的区别

jar包和war包都可以看成压缩文件,都可以用解压软件打开,jar包和war包都是为了项目的部署和发布,通常在打包部署的时候,会在里面加上部署的相关信息。这个打包实际上就是把代码和依赖的东西压缩在一起,变成后缀名为.jar和.war的文件,就是我们说的jar包和war包。但是这个压缩包可以被编译器直接使用,把war包放在tomcat目录的webapp下,tomcat服务器在启动的时候可以直接使用这个war包。通常tomcat的做法是解压,编译里面的代码,所以当文件很多的时候,tomcat的启动会很慢。

jar包和war包的区别:jar包是java打的包,war包可以理解为javaweb打的包,这样会比较好记。jar包中只是用java来写的项目打包来的,里面只有编译后的class和一些部署文件。而war包里面的东西就全了,包括写的代码编译成的class文件,依赖的包,配置文件,所有的网站页面,包括html,jsp等等。一个war包可以理解为是一个web项目,里面是项目的所有东西。

两种方式

jar

  springboot项目支持创建可执行Jar,参考手册第11.5. Creating an Executable Jar就有对这样的介绍。

  如果需要打jar包直接进入idea之后使用maven然后进行 package 直接进行jar包创建

war

​ 参考手册第92.1 Create a Deployable War File就有对这样的介绍:

​ 由于Spring WebFlux并不严格依赖于Servlet API,并且应用程序默认部署在嵌入式反应器Netty服务器上,所以WebFlux应用程序不支持War部署。

  生成可部署war文件的第一步是提供SpringBootServletInitializer子类并覆盖其配置方法。这样做可以利用Spring Framework的Servlet 3.0支持,让您在Servlet容器启动应用程序时配置它。通常,您应该更新应用程序的主类以扩展SpringBootServletInitializer,同时,要将Spring应用程序部署到外部服务器,必须确保servlet初始化器直接实现WebApplicationInitializer(即使是从已经实现它的基类扩展而来)。如下例所示:

@SpringBootApplication
public class MyspringbootApplication extends SpringBootServletInitializer implements WebApplicationInitializer { @Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(MyspringbootApplication.class);
} public static void main(String[] args) {
SpringApplication.run(MyspringbootApplication.class, args);
}
}

  在创建springboot项目时,默认是jar包,如果是想要打成war包,需要修改pom.xml,打包方式跟生成路径跟jar的一样,过程的最后一步是确保嵌入的servlet容器不会干扰部署war文件的servlet容器。为此,需要将嵌入式servlet容器依赖项标记为所提供的。

<!--默认jar-->
<packaging>war</packaging> <!-- 如需打成war包 确保嵌入的servlet容器不会干扰部署war文件的servlet容器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency> <!--构建工具-->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>

  得到war包后把它丢到服务容器里(放在webapps文件夹下)run起来就行了,要注意的是使用了外部容器,记得改Tomcat的端口,在server.xml的Connector节点

最后

  推荐直接使用jar的方式运行。

jar包与war包的部署的更多相关文章

  1. Spring Boot Jar包转War包 部署到Tomcat下

    原文:https://my.oschina.net/sdlvzg/blog/1562998 我们都知道springBoot中已经内置了tomcat,是不需要我们额外的配置tomcat服务器的,但是有时 ...

  2. jar包和war包的区别(转)

    jar包和war包的区别:war是一个web模块,其中需要包括WEB-INF,是可以直接运行的WEB模块.而jar一般只是包括一些class文件,在声明了Main_class之后是可以用java命令运 ...

  3. jar包和war包的区别

    jar包和war包的区别: jar包就是别人已经写好的一些类,然后将这些类进行打包,你可以将这些jar包引入你的项目中,然后就可以直接使用这些jar包中的类和属性了,这些jar包一般都会放在lib目录 ...

  4. jar包和war包的介绍与区别

    在学习maven的过程中接触到了jar包和war包.之前在写小项目的时候真的遇到过war包,当时为了找到jar包,把war包 的后缀名改成了.rar的压缩文件,在里面提取出来jar包来用.其实jar包 ...

  5. spring boot + jersey工程由jar包转为war包在tomcat中启动报错问题

    第一步: 在maven下,将Spring Boot工程由jar转换为war包启动,很简单,将pom.xml文件中的packaging改为war <packaging>war</pac ...

  6. jar包和war包的介绍和区别

    jar包和war包的介绍和区别 Java程序员的日常 关注 做Java开发,jar包和war包接触的挺多的,有必要对它们做一个深入的了解,特总结整理如下: 1.jar包的介绍 JAR(Java Arc ...

  7. 【spring boot】idea下springboot打包成jar包和war包,并且可以在外部tomcat下运行访问到(转)

    转自:https://www.cnblogs.com/sxdcgaq8080/p/7727249.html   接着上一章走呗:http://www.cnblogs.com/sxdcgaq8080/p ...

  8. spring boot中,jar包、war包的区别

    jar包.war包 比较(表格) 项目 jar包 war包 在开发调试完成之后,可以将应用打成JAR包的形式,可以直接使用Maven插件的package命令,最终会形成一个可运行的 JAR包.我们使用 ...

  9. 杂项-Java:jar 包与 war 包介绍与区别

    ylbtech-杂项-Java:jar 包与 war 包介绍与区别 1.返回顶部 1. 做Java开发,jar包和war包接触的挺多的,有必要对它们做一个深入的了解,特总结整理如下: 1.jar包的介 ...

  10. 【spring boot】6.idea下springboot打包成jar包和war包,并且可以在外部tomcat下运行访问到

    接着上一章走呗:http://www.cnblogs.com/sxdcgaq8080/p/7712874.html 然后声明一点,下面打包的过程中,scope一直都是使用默认的范围 <!--用于 ...

随机推荐

  1. vue 收藏

    html: //收藏 <el-table-column prop="isOpen" label="">                 <te ...

  2. redis in windows

    Redis https://github.com/MSOpenTech/redis/releases 启动 redis-server redis.windows.conf 设置服务 redis-ser ...

  3. wpBullet-20190604

    WordPress Plugins/Themes 和 PHP 的静态代码分析工具 Usage: wpbullet.py [-h] [--path PATH] [--enabled ENABLED] [ ...

  4. JavaScript基础知识整理(引用类型-Date)

    Date Date类型可以用来保存时间,保存的日期可以精确到1970年1月1日之后或之前的100000000天. 要创建Date类型对象,可以使用new操作符加构造函数. var now = new ...

  5. flutter RaisedButton 设置最小宽度和高度

    flutter中可以通过ButtonTheme为RaisedButton设置最小宽度,示例代码如下: ButtonTheme( minWidth: 200.0,//设置最小宽度 height: 100 ...

  6. Flutter showModalBottomSheet 自适应高度

    showModalBottomSheet( context: context, shape: const RoundedRectangleBorder( borderRadius: BorderRad ...

  7. Flutter Web预览时白屏解决方法

    原因是因为运行 flutter run 是自动选择渲染器 桌面端WEB浏览器默认使用  CanvasKit渲染器 移动端WEB浏览器默认使用  HTML渲染器 问题就出在了CanvasKit渲染器,他 ...

  8. 【Android异常】关于静态注册BroadcastReceiver接收不到系统广播的问题

    如果你静态注册的广播无法接收到消息,请先检查下:你的安卓版本是不是8.0+ 前言Google官方声明:Beginning with Android 8.0 (API level 26), the sy ...

  9. Transformer_Detection-(DETR) 引入视觉领域的首创DETR (ECCV2020)

    End-to-End Object Detection with Transformers paper: https://link.zhihu.com/?target=https%3A//arxiv. ...

  10. ArrayList 的toArray的转换数组方法的注意事项

    ArrayList 的toArray的转换数组方法的注意事项 toArray()一共有两个方法 toArray(T[] a) 和toArray() 源码是 进行使用toArray()方法时候,使用 ( ...