欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot和VUE源碼直接整合打包成jar的踩坑記錄

 更新時間:2024年03月05日 10:02:40   作者:喵喵@香菜  
這篇文章主要介紹了SpringBoot和VUE源碼直接整合打包成jar的踩坑記錄,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

一、前言

spring boot是要打成jar包運行的,項目采用了前(VUE)后(SpringBoot)端完全分離,開發(fā)完成后需要整合到一起發(fā)布,這就要引出這篇博客的由來了;一開始的時候是前端VUE開發(fā)完成后打成dist包然后發(fā)給我(前后端不在一起開發(fā)),我拿到dist包后解壓然后放到springboot的static目錄下。

然后將項目打成jar包。

最后部署,一次兩次沒問題,但是如果是聯(lián)調(diào)階段,前端改了東西就會很麻煩。

因為我們不在一起工作,團隊的git地址不是同的。

項目經(jīng)理提出:把這兩個一起打包,你研究一下,能到做吧?

這時我走向了樓頂,好的,博客結(jié)束,人生結(jié)束。。。。(搞笑一下)

程序員的字典里沒有不字!去網(wǎng)上搜,別說還真有這玩意(比人才疏學(xué)淺,工作沒多長時間,所以對我來說算是個難題)但是原博客里有坑啊,弄過來以后沒達(dá)到預(yù)期效果啊,這個坑就是我長進(jìn)的地方了。

二、環(huán)境介紹

一個springBoot項目、maven、VUE前端源碼、本地需要安裝node環(huán)境、IDEA

三、踩坑

加個思路說明吧:通過maven打包jar包時,通過maven調(diào)用node命令先將VUE打包,然后將打包好的東西通過復(fù)制的方式到指定目錄;這個是網(wǎng)上其他博客的思路,我一開也是進(jìn)行這種,后面進(jìn)行了改進(jìn)。

先踩別人踩過的腳印。

1)先介紹一下目錄結(jié)構(gòu)

如下如

說明一下:springBoot的是目錄結(jié)構(gòu)是java和resource,在main目錄下創(chuàng)建一個文件夾web(名字你自己定,但是下面配置maven的時候要對應(yīng)上);

擴展:在IDEA中開發(fā)vue,可以安裝UVE.js插件,這個安裝教程我就不寫了,網(wǎng)上有。

2)要介紹一下VUE打包流程

首先源碼是我要過來以后直接粘貼到的web文件夾下,但是沒有node_modules這個文件夾,因為這個文件夾一般很大(而且好像默認(rèn)也會忽略這個文件夾),所以前端沒有粘給我。

這個時候就需要先install

拿到源碼后npm命令總結(jié)如下:npm install (安裝相關(guān)modules)

npm run build (打包)

如果是npm鏡像為淘寶的那個的話,npm和cnpm等效。

3)在項目中的pom文件中添加插件

pom文件如下圖:

先聲明:VUE源碼沒有node_module,所以是要第一步執(zhí)行的,第二部是buildVue,第三步是復(fù)制打包的東西到指定目錄。

這個順序很重要,就像人生一樣,凡事總要有個順序。。。扯遠(yuǎn)了,之所以是因為強調(diào)順序,是因為我采的坑就是順序問題。

pom文件來了,如下圖:

 <build>
        <plugins>
             <!--SpringBoot和VUE整合打包-->
             <plugin>
                 <groupId>org.codehaus.mojo</groupId>
                 <artifactId>exec-maven-plugin</artifactId>
                 <executions>
                     <!--1、maven執(zhí)行node的install命令-->
                     <execution>
                         <id>exec-cnpm-install</id>
                         <!--這個階段很重要,不能亂寫,install必須要為第一階段-->
                         <phase>initialize</phase>
                         <goals>
                             <goal>exec</goal>
                         </goals>
                         <configuration>
                             <executable>cnpm</executable>
                             <arguments>
                                 <argument>install</argument>
                             </arguments>
                             <!--執(zhí)行install命令的目錄-->
                             <workingDirectory>${basedir}/src/main/web</workingDirectory>
                         </configuration>
                     </execution>
                     <!--2、install完成后build-->
                     <execution>
                         <id>exec-cnpm-run-build</id>
                         <!--階段一定要在復(fù)制之前,且在打包和復(fù)制都在編譯之前-->
                         <phase>initialize</phase>
                         <goals>
                             <goal>exec</goal>
                         </goals>
                         <configuration>
                             <executable>cnpm</executable>
                             <arguments>
                                 <argument>run</argument>
                                 <argument>build</argument>
                             </arguments>
                             <workingDirectory>${basedir}/src/main/web</workingDirectory>
                             <addOutputToClasspath>true</addOutputToClasspath>
                         </configuration>
                     </execution>
                 </executions>
             </plugin>
            <!--3、復(fù)制打包好的文件到指定目錄-->
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-resources-plugin</artifactId>
                 <configuration>
                     <encoding>${project.build.sourceEncoding}</encoding>
                 </configuration>
                 <executions>
                     <execution>
                         <id>copy-spring-boot-webapp</id>
                         <phase>initialize</phase>
                          <goals>
                              <goal>copy-resources</goal>
                          </goals>
                         <configuration>
                             <encoding>utf-8</encoding>
                             <outputDirectory>${basedir}/src/main/resources/static</outputDirectory>
                             <resources>
                                 <resource>
                                     <directory>${basedir}/src/main/web/dist</directory>
                                 </resource>
                             </resources>
                         </configuration>
                     </execution>
                 </executions>
             </plugin>    
        </plugins>
    </build>

說明:這個地方需要說一下maven的打包的階段,然后配合上上面說明的順序才能一步打包成jar。

4)擴展—maven的默認(rèn)生命周期

以下是按照先后順序排列的。

default生命周期是最核心的,它包含了構(gòu)建項目時真正需要執(zhí)行的所有步驟。

validate
initialize
generate-sources
process-sources
generate-resources
process-resources:復(fù)制和處理資源文件到target目錄,準(zhǔn)備打包;
compile:編譯項目的源代碼;
process-classes
generate-test-sources
process-test-sources
generate-test-resources
process-test-resources
test-compile:編譯測試源代碼;
process-test-classes
test:運行測試代碼;
prepare-package
package:打包成jar或者war或者其他格式的分發(fā)包;
pre-integration-test
integration-test
post-integration-test
verify
install:將打好的包安裝到本地倉庫,供其他項目使用;
deploy:將打好的包安裝到遠(yuǎn)程倉庫,供其他項目使用;

5)坑在哪?

坑就在網(wǎng)上的博客只是在階段上粘貼了一段如:

代碼下

 <execution>
                         <id>copy-spring-boot-webapp</id>
                         <!-- here the phase you need -->
                         <phase>initialize</phase>
                          <goals>
                              <goal>copy-resources</goal>
                          </goals>

像我這種經(jīng)過這種坑才知道m(xù)aven生命周期的人是注定要踩進(jìn)去的。踩的坑多了,世界便沒有了坑。。。

像這個initialize 這里填入的參考上面貼出的maven默認(rèn)生命周期,因為打包是將target下的東西最后壓縮成jat ,也就是編譯后的東西,所以我們的install,build和復(fù)制操作都應(yīng)該在compile階段之前。所以選擇在了

第一階段initialize。當(dāng)初網(wǎng)上博客寫的基本上全都是prepare-package階段,這tm讓我這個渣渣調(diào)了三個小時,最后將坑zhan于馬下。也不知道他們那些是真的一步打包成功了還是故意留坑。

6)關(guān)于標(biāo)簽

這個是將插件的執(zhí)行綁定到maven執(zhí)行的時候生命周期。關(guān)于這個生命周期有一篇博客,我轉(zhuǎn)載了,列舉的很清楚。

7)雖然解決了坑

但是解決完思考一下,步驟其實可以是可以簡化的,就比如那個復(fù)制過程。以及install過程。下個標(biāo)題介紹簡化。

8)如果你在maven里配置install、build和copy第一次的時間會很長

而且還不一定會成功??梢愿鶕?jù)需要將階段優(yōu)化。主要是因為maven執(zhí)行node命令的時候,node那個命令很慢。

四、簡化

1)install這個建議最好在maven配置中去掉

時間慢是一部分原因,另一部分原因就是,如果你以后要重新打jar的話,還是會執(zhí)行install,這個install只需要一次就夠了,所以建議這個install不要加。

在將源碼復(fù)制的時候要一份node_modlues或者自己學(xué)著在cmd里先執(zhí)行完install命令。

如果node環(huán)境沒問題,因為這個只需要成功執(zhí)行一次就夠了。

另一種情況就是如果項目一開始在搭建的時候,vue和springboot都在一個目錄下的話,也就是初始化vue的時候你肯定執(zhí)行過install命令。

另外說明一點就是如果Vue前端開發(fā)中添加了新的modules,你就需要執(zhí)行install命令,(而且版本控制的時候沒有提交這個新的modules),作為一個java開發(fā)工程師在cmd里執(zhí)行一下子還是行的吧,畢竟你想一起打包的話,也要安裝node環(huán)境,只需要在vue目錄下執(zhí)行 npm install 就可以了,沒什么難度。

2)build是必須要的

如果我們把build好的包直接build到指定目錄,這樣是不是就不在需要copy這個插件,對吧,所以我的簡化思路就是直接build到指定目錄好了。

五、簡化過程

1)思路

先在cmd中執(zhí)行install(因為install不是主要的,只有在vue中添加了新的Modules和初始化時才需要),所以去掉這個plugin;

主要就是執(zhí)行run build,所以將復(fù)制那一步也省略掉。

2)修改pom文件中的配置

修改后如下(其實就是將install和copy去掉了):

<build>
        <plugins>
             <!--SpringBoot和VUE整合打包-->
             <plugin>
                 <groupId>org.codehaus.mojo</groupId>
                 <artifactId>exec-maven-plugin</artifactId>
                 <executions>
                     <!--2、install完成后build-->
                     <execution>
                         <id>exec-cnpm-run-build</id>
                         <phase>initialize</phase>
                         <goals>
                             <goal>exec</goal>
                         </goals>
                         <configuration>
                             <executable>cnpm</executable>
                             <arguments>
                                 <argument>run</argument>
                                 <argument>build</argument>
                             </arguments>
                             <workingDirectory>${basedir}/src/main/web</workingDirectory>
                             <addOutputToClasspath>true</addOutputToClasspath>
                         </configuration>
                     </execution>
                 </executions>
             </plugin>
       
        </plugins>
    </build>

說明:${basedir}/src/main/web是放置整個VUE源碼的地方,當(dāng)去掉復(fù)制這一個plugin以后,就需要在VUE源碼里進(jìn)行修改,也就是設(shè)置build的時候直接放到springBoot的static下。

3)項目目錄結(jié)構(gòu)

如下:

說明:static是放置靜態(tài)資源的文件目錄(SpringBoot默認(rèn)獲取靜態(tài)資源和頁面的設(shè)置可百度了解一下),web是自己創(chuàng)建的,名字可以改,之所以創(chuàng)建這個一個目錄是將前后端分離,如果目錄結(jié)構(gòu)和我的這個不一樣的,修改Vue的打包配置時需要對應(yīng)上。

4)修改Vue中的打包配置

先了解一下文件的相對路徑知識,web和static是同級目錄。

對Vue的修改是上圖目錄中的web/config目錄下的index.js,修改后代碼如下:

'use strict'
 documentation.

const path = require('path')

module.exports = {
  dev: {
    // Paths
    assetsSubDirectory: 'static',
    assetsPublicPath: '/',
    proxyTable: {},
    host: 'localhost', // can be overwritten by process.env.HOST
    port: 9528, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined
    autoOpenBrowser: true,
    errorOverlay: true,
    notifyOnErrors: false,
    poll: false, 
    useEslint: true,
    showEslintErrorsInOverlay: false,
    devtool: 'cheap-source-map',
    cssSourceMap: false
  },
//  整合打包主要是修改這個build
  build: {
    // Template for index.html
    // index為Vue的打包后的入口
    index: path.resolve(__dirname, '../../resources/static/index.html'),

    // Paths
    assetsRoot: path.resolve(__dirname, '../../resources/static'),
    assetsSubDirectory: '',
    assetsPublicPath: '/',
    // 修改結(jié)束
    
    productionSourceMap: false,
    
    devtool: 'source-map',
    productionGzip: false,
    productionGzipExtensions: ['js', 'css'],
    bundleAnalyzerReport: process.env.npm_config_report || false,
    generateAnalyzerReport: process.env.npm_config_generate_report || false
  }
}

5)這樣就可以

將打包好的Vue的東西直接放到static下了,原理很簡單。

弄到別的路徑就修改一下上面的打包路徑。

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • java實現(xiàn)中英文混合字符截取方法

    java實現(xiàn)中英文混合字符截取方法

    這篇文章主要為大家詳細(xì)介紹了java實現(xiàn)中英文混合字符的截取方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • Java設(shè)計模式中的適配器模式詳解

    Java設(shè)計模式中的適配器模式詳解

    適配器模式(Adapter),是Java23種設(shè)計模式中的結(jié)構(gòu)型模式之一,它可以將新的功能和原先的功能連接起來,使由于需求變動導(dǎo)致不能用的功能,重新利用起來,本文將詳細(xì)聊一聊Java適配器的運用場景和使用方法,感興趣的同學(xué)可以跟著小編一起來學(xué)習(xí)
    2023-05-05
  • Java中的方法內(nèi)聯(lián)介紹

    Java中的方法內(nèi)聯(lián)介紹

    大家好,本篇文章主要講的是Java中的方法內(nèi)聯(lián)介紹,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • 使用java將動態(tài)網(wǎng)頁生成靜態(tài)網(wǎng)頁示例

    使用java將動態(tài)網(wǎng)頁生成靜態(tài)網(wǎng)頁示例

    這篇文章主要介紹了使用java將動態(tài)網(wǎng)頁生成靜態(tài)網(wǎng)頁示例,需要的朋友可以參考下
    2014-03-03
  • 關(guān)于Hadoop的HDFS集群

    關(guān)于Hadoop的HDFS集群

    這篇文章主要介紹了關(guān)于Hadoop的HDFS集群,Hadoop 如何配置集群、不同的計算機里又應(yīng)該有怎樣的配置,這些問題是在學(xué)習(xí)中產(chǎn)生的。本章的配置中將會提供一個典型的示例,需要的朋友可以參考下
    2023-05-05
  • Java用戶登錄驗證代碼

    Java用戶登錄驗證代碼

    本文給大家使用java代碼實現(xiàn)用戶登錄驗證功能,當(dāng)用戶輸入三次錯誤后,用戶不可以再次登錄的。具體實現(xiàn)代碼,大家可以參考下本教程
    2016-08-08
  • 最新評論