<kbd id="5sdj3"></kbd>
<th id="5sdj3"></th>

  • <dd id="5sdj3"><form id="5sdj3"></form></dd>
    <td id="5sdj3"><form id="5sdj3"><big id="5sdj3"></big></form></td><del id="5sdj3"></del>

  • <dd id="5sdj3"></dd>
    <dfn id="5sdj3"></dfn>
  • <th id="5sdj3"></th>
    <tfoot id="5sdj3"><menuitem id="5sdj3"></menuitem></tfoot>

  • <td id="5sdj3"><form id="5sdj3"><menu id="5sdj3"></menu></form></td>
  • <kbd id="5sdj3"><form id="5sdj3"></form></kbd>

    Spring Boot 部署打包成 jar 和 war 有什么不同?

    共 12400字,需瀏覽 25分鐘

     ·

    2023-03-03 23:53

    首先給大家來(lái)講一個(gè)我們遇到的一個(gè)奇怪的問(wèn)題:
    1. 我的一個(gè)springboot項(xiàng)目,用mvn install打包成jar,換一臺(tái)有jdk的機(jī)器就直接可以用java -jar 項(xiàng)目名.jar的方式運(yùn)行,沒(méi)任何問(wèn)題,為什么這里不需要tomcat也可以運(yùn)行了?

    2. 然后我打包成war放進(jìn)tomcat運(yùn)行,發(fā)現(xiàn)端口號(hào)變成tomcat默認(rèn)的8080(我在server.port中設(shè)置端口8090)項(xiàng)目名稱也必須加上了。

    也就是說(shuō)我在原來(lái)的機(jī)器的IDEA中運(yùn)行,項(xiàng)目接口地址為 ip:8090/listall,打包放進(jìn)另一臺(tái)機(jī)器的tomcat就變成了ip:8080/項(xiàng)目名/listall。這又是為什么呢?

    • 通過(guò)jar運(yùn)行實(shí)際上是啟動(dòng)了內(nèi)置的tomcat,所以用的是應(yīng)用的配置文件中的端口

    • 直接部署到tomcat之后,內(nèi)置的tomcat就不會(huì)啟用,所以相關(guān)配置就以安裝的tomcat為準(zhǔn),與應(yīng)用的配置文件就沒(méi)有關(guān)系了

    哎,現(xiàn)在學(xué)編程的基本都不會(huì)教歷史了,也沒(méi)人有興趣去鉆研。

    總體來(lái)說(shuō)吧,很多年前,Sun 還在世的那個(gè)年代,在度過(guò)了早期用 C++寫(xiě) Html 解析器的蠻荒時(shí)期后,有一批最早的腳本程序進(jìn)入了 cgi 時(shí)代,此時(shí)的 Sun 決定進(jìn)軍這個(gè)領(lǐng)域,為了以示區(qū)別并顯得自己高大上,于是研發(fā)了 servlet 標(biāo)準(zhǔn),搞出了最早的 jsp。并給自己起了個(gè)高大上的稱號(hào) JavaEE ( Java 企業(yè)級(jí)應(yīng)用標(biāo)準(zhǔn),其實(shí)不就是一堆服務(wù)器以 http 提供服務(wù)嗎,吹逼)。

    既然是企業(yè)級(jí)標(biāo)準(zhǔn)那自然得有自己的服務(wù)器標(biāo)準(zhǔn)。于是 Servlet 標(biāo)準(zhǔn)誕生,以此標(biāo)準(zhǔn)實(shí)現(xiàn)的服務(wù)器稱為 Servle 容器服務(wù)器,Tomcat 就是其中代表,被 Sun 捐獻(xiàn)給了 Apache 基金會(huì),那個(gè)時(shí)候的 Web 服務(wù)器還是個(gè)高大上的概念,當(dāng)時(shí)的 Java Web 程序的標(biāo)準(zhǔn)就是 War 包(其實(shí)就是個(gè) Zip 包),這就是 War 包的由來(lái)。

    后來(lái)隨著服務(wù)器領(lǐng)域的屢次進(jìn)化,人們發(fā)現(xiàn)我們?yōu)槭裁匆@么笨重的 Web 服務(wù)器,還要實(shí)現(xiàn)一大堆 Servlet 之外的管理功能,簡(jiǎn)化一下抽出核心概念 servlet 不是更好嗎,最早這么干的似乎是 Jetty,出現(xiàn)了可以內(nèi)嵌的 Servelet 服務(wù)器。

    去掉了一大堆非核心功能。后來(lái) tomcat 也跟進(jìn)了,再后來(lái),本來(lái)很笨重的傳統(tǒng) JavaEE 服務(wù)器 Jboss 也搞了個(gè) undertow 來(lái)湊熱鬧。正好這個(gè)時(shí)候微服務(wù)的概念興起,“ use Jar,not War ”。要求淘汰傳統(tǒng) Servlet 服務(wù)器的呼聲就起來(lái)了。

    jar包和war包的區(qū)別

    1、war是一個(gè)web模塊,其中需要包括WEB-INF,是可以直接運(yùn)行的WEB模塊;jar一般只是包括一些class文件,在聲明了Main_class之后是可以用java命令運(yùn)行的。

    2、war包是做好一個(gè)web應(yīng)用后,通常是網(wǎng)站,打成包部署到容器中;jar包通常是開(kāi)發(fā)時(shí)要引用通用類,打成包便于存放管理。

    3、war是Sun提出的一種Web應(yīng)用程序格式,也是許多文件的一個(gè)壓縮包。這個(gè)包中的文件按一定目錄結(jié)構(gòu)來(lái)組織;classes目錄下則包含編譯好的Servlet類和Jsp或Servlet所依賴的其它類(如JavaBean)可以打包成jar放到WEB-INF下的lib目錄下。

    JAR文件格式以流行的ZIP文件格式為基礎(chǔ)。與ZIP文件不同的是,JAR 文件不僅用于壓縮和發(fā)布,而且還用于部署和封裝庫(kù)、組件和插件程序,并可被像編譯器和 JVM 這樣的工具直接使用。

    【格式特點(diǎn)】:
    • 安全性 可以對(duì) JAR 文件內(nèi)容加上數(shù)字化簽名。這樣,能夠識(shí)別簽名的工具就可以有選擇地為您授予軟件安全特權(quán),這是其他文件做不到的,它還可以檢測(cè)代碼是否被篡改過(guò)。

    • 減少下載時(shí)間 如果一個(gè) applet 捆綁到一個(gè) JAR 文件中,那么瀏覽器就可以在一個(gè) HTTP 事務(wù)中下載這個(gè) applet 的類文件和相關(guān)的資源,而不是對(duì)每一個(gè)文件打開(kāi)一個(gè)新連接。

    • 壓縮 JAR 格式允許您壓縮文件以提高存儲(chǔ)效率。

    • 傳輸平臺(tái)擴(kuò)展 Java 擴(kuò)展框架(Java Extensions Framework)提供了向 Java 核心平臺(tái)添加功能的方法,這些擴(kuò)展是用 JAR 文件打包的(Java 3D 和 JavaMail 就是由 Sun 開(kāi)發(fā)的擴(kuò)展例子)。

    WAR文件就是一個(gè)Web應(yīng)用程序,建立WAR文件,就是把整個(gè)Web應(yīng)用程序(不包括Web應(yīng)用程序?qū)哟谓Y(jié)構(gòu)的根目錄)壓縮起來(lái),指定一個(gè)war擴(kuò)展名。

    【建立的條件】:
    • 需要建立正確的Web應(yīng)用程序的目錄層次結(jié)構(gòu)。

    • 建立WEB-INF子目錄,并在該目錄下建立classes與lib兩個(gè)子目錄。

    • 將Servlet類文件放到WEB-INF\classes目錄下,將Web應(yīng)用程序所使用Java類庫(kù)文件(即JAR文件)放到WEB-INF\lib目錄下。

    • 將JSP頁(yè)面或靜態(tài)HTML頁(yè)面放到上下文根路徑下或其子目錄下。

    • 建立META-INF目錄,并在該目錄下建立context.xml文件。

    下面給大家講講怎么將springboot項(xiàng)目打包成jar和war

    SpringBoot項(xiàng)目打包成jar很簡(jiǎn)單,也是SpringBoot的常用打包格式;本篇博客將SpringBoot打包成jar和war兩種方式都記錄下來(lái);

    先介紹將SpringBoot打包成jar包的方式:(以下示例是在idea中演示)

    一、打包成jar

    1)先new 一個(gè)Spring Starter Project

    這里注意packaging默認(rèn)為jar,不用修改.

    2)創(chuàng)建完成后項(xiàng)目的pom如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

     <modelVersion>4.0.0</modelVersion>
     <parent>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-parent</artifactId>
      <version>2.1.4.RELEASE</version>
      <relativePath/> <!-- lookup parent from repository -->
     </parent>
     <groupId>com.example</groupId>
     <artifactId>demo</artifactId>
     <version>0.0.1-SNAPSHOT</version>
     <name>demo</name>
     <description>Demo project for Spring Boot</description>
     
     <properties>
      <java.version>1.8</java.version>
     </properties>
     
     <dependencies>
      <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter</artifactId>
      </dependency>
     
      <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-test</artifactId>
       <scope>test</scope>
      </dependency>
     </dependencies>
     
     <build>
      <plugins>
       <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
       </plugin>
      </plugins>
     </build>
     
    </project>

    3)打成jar包(通過(guò)maven命令的方式):

    在Terminal窗口,使用 mvn clean package 命令打包:

    然后在target目錄下就能看到打包好的jar包了

    二、打包成war包形式

    1)可以在剛才創(chuàng)建的項(xiàng)目上做改動(dòng),首先打包成war需要一個(gè)ServletInitializer類,這個(gè)類的位置需要和啟動(dòng)類在同一個(gè)文件下

    如果一開(kāi)始選擇war包形式,會(huì)自動(dòng)創(chuàng)建此類

    2)修改pom.xml

    修改pom.xml的war將原先的jar改為war;

    3)如果我們的SpringBoot是使用html作為前端頁(yè)面開(kāi)發(fā)沒(méi)有問(wèn)題,但是如果我們想用jsp開(kāi)發(fā),這個(gè)時(shí)候就需要配置一些依賴了:主要是排除SpringBoot的內(nèi)置Tomcat,添加javax.servlet-apitomcat-servlet-api(SpringMVC還需要配置后綴);

    最后的pom.xml如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

     <modelVersion>4.0.0</modelVersion>
     <parent>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-parent</artifactId>
      <version>2.1.4.RELEASE</version>
      <relativePath/> <!-- lookup parent from repository -->
     </parent>
     <groupId>com.example</groupId>
     <artifactId>demo</artifactId>
     <version>0.0.1-SNAPSHOT</version>
     <packaging>war</packaging>
     <name>demo</name>
     <description>Demo project for Spring Boot</description>
     
     <properties>
      <java.version>1.8</java.version>
     </properties>
     
     <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-thymeleaf</artifactId>
                <exclusions>
                    <exclusion>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-starter-tomcat</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>javax.servlet-api</artifactId>
                <scope>provided</scope>
            </dependency>
     
            <dependency>
                <groupId>org.apache.tomcat</groupId>
                <artifactId>tomcat-servlet-api</artifactId>
                <version>8.0.36</version>
                <scope>provided</scope>
            </dependency>
     
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
     
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-tomcat</artifactId>
                <scope>provided</scope>
            </dependency>
     
      <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-test</artifactId>
       <scope>test</scope>
      </dependency>
     </dependencies>
     
     <build>
      <plugins>
       <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
       </plugin>
      </plugins>
     </build>
     
    </project>

    因?yàn)镾pringBoot默認(rèn)推薦的是html,而不是jsp;經(jīng)過(guò)上面的修改就可以使用jsp進(jìn)行開(kāi)發(fā)了;

    4)打包成war:使用mvn clean package

    如下:

    打包成功后,就可以將war包放在tomcat下的webapps下,然后運(yùn)行tomcat,啟動(dòng)項(xiàng)目了;

    記錄下來(lái),以后用到的時(shí)候看 ^_^;

    當(dāng)然了,在創(chuàng)建項(xiàng)目的時(shí)候直接選擇package為war,直接就能打成war包了

    當(dāng)選擇war為打包方式創(chuàng)建項(xiàng)目時(shí),ServletInitializer是默認(rèn)直接創(chuàng)建的

    此時(shí),pom文件如下

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

     <modelVersion>4.0.0</modelVersion>
     <parent>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-parent</artifactId>
      <version>2.1.4.RELEASE</version>
      <relativePath/> <!-- lookup parent from repository -->
     </parent>
     <groupId>com.example</groupId>
     <artifactId>demo</artifactId>
     <version>0.0.1-SNAPSHOT</version>
     <packaging>war</packaging>
     <name>demo</name>
     <description>Demo project for Spring Boot</description>
     
     <properties>
      <java.version>1.8</java.version>
     </properties>
     
     <dependencies>
      <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-web</artifactId>
      </dependency>
     
      <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-tomcat</artifactId>
       <scope>provided</scope>
      </dependency>
      <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-test</artifactId>
       <scope>test</scope>
      </dependency>
     </dependencies>
     
     <build>
      <plugins>
       <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
       </plugin>
      </plugins>
     </build>
     
    </project>

    直接mvn clean package就能打包成功

    感謝閱讀,希望對(duì)你有所幫助 :) 

    來(lái)源:https://blog.csdn.net/weixin_40910372/

    推薦閱讀:

    世界的真實(shí)格局分析,地球人類社會(huì)底層運(yùn)行原理

    不是你需要中臺(tái),而是一名合格的架構(gòu)師(附各大廠中臺(tái)建設(shè)PPT)

    企業(yè)IT技術(shù)架構(gòu)規(guī)劃方案

    論數(shù)字化轉(zhuǎn)型——轉(zhuǎn)什么,如何轉(zhuǎn)?

    華為干部與人才發(fā)展手冊(cè)(附PPT)

    企業(yè)10大管理流程圖,數(shù)字化轉(zhuǎn)型從業(yè)者必備!

    【中臺(tái)實(shí)踐】華為大數(shù)據(jù)中臺(tái)架構(gòu)分享.pdf

    華為的數(shù)字化轉(zhuǎn)型方法論

    華為如何實(shí)施數(shù)字化轉(zhuǎn)型(附PPT)

    超詳細(xì)280頁(yè)Docker實(shí)戰(zhàn)文檔!開(kāi)放下載

    華為大數(shù)據(jù)解決方案(PPT)

    瀏覽 34
    點(diǎn)贊
    評(píng)論
    收藏
    分享

    手機(jī)掃一掃分享

    分享
    舉報(bào)
    評(píng)論
    圖片
    表情
    推薦
    點(diǎn)贊
    評(píng)論
    收藏
    分享

    手機(jī)掃一掃分享

    分享
    舉報(bào)

    <kbd id="5sdj3"></kbd>
    <th id="5sdj3"></th>

  • <dd id="5sdj3"><form id="5sdj3"></form></dd>
    <td id="5sdj3"><form id="5sdj3"><big id="5sdj3"></big></form></td><del id="5sdj3"></del>

  • <dd id="5sdj3"></dd>
    <dfn id="5sdj3"></dfn>
  • <th id="5sdj3"></th>
    <tfoot id="5sdj3"><menuitem id="5sdj3"></menuitem></tfoot>

  • <td id="5sdj3"><form id="5sdj3"><menu id="5sdj3"></menu></form></td>
  • <kbd id="5sdj3"><form id="5sdj3"></form></kbd>
    成人免费无码麻豆精品 | 小早川怜子爆乿护士中文在线 | 超污的网站 | 中文字幕 第二页 | 午夜无码中文字幕 |