日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

通过Maven构建打包Spring boot,并将config配置文件提取到jar文件外

發布時間:2025/3/15 javascript 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 通过Maven构建打包Spring boot,并将config配置文件提取到jar文件外 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

如果通過不同的IDE打包,著實會覺得依賴性太大,并且容易出現錯誤,操作也比較復雜?

同時,spring-boot-maven-plugin的使用感覺,相關配置太少,并且無法滿足方便部署和運行的需求。?


這里我們使用了,Maven的如下插件?下載?

maven-jar-plugin,負責將應用程序打包成可執行的jar文件?
maven-assembly-plugin,負責將整個項目按照自定義的目錄結構打成最終的壓縮包,方便實際部署?



需求1,將依賴的jar提取到可運行的jar文件之外,我們使用maven-jar-plugin來實現?下載?

比如我的項目最終的打包目錄如下?
?
代碼目錄結構如下?
?

最終的可運行文件jar文件并不包含依賴的jar包,所有依賴的jar包都放在和ps.jar平行的lib文件夾內,這樣如果以后想快速部署,就不用每一次都把體積很大的lib包都要傳一遍,除非依賴包有所變化,當然這些都是后續如果想這么做的前提,我這里還是為了使部署的文件比較規整?
這里的maven-jar-plugin的配置文件如下?

Xml代碼??下載?
  • <plugin>??
  • ????????????????<groupId>org.apache.maven.plugins</groupId>??
  • ????????????????<artifactId>maven-jar-plugin</artifactId>??
  • ????????????????<version>2.6</version>??
  • ????????????????<configuration>??
  • ????????????????????<archive>??
  • ????????????????????<!--?添加index則不從mainfest中讀取classpath,而是從Index.list中讀取?-->??
  • <!--?????????????????????????<index>true</index>?-->??
  • ????????????????????????<manifest>??
  • ????????????????????????????<mainClass>com.vmpay.pay.App</mainClass>??
  • ????????????????????????????<!--?to?create?a?class?path?to?your?dependecies?you?have?to?fill?true???
  • ????????????????????????????????in?this?field?-->??
  • ????????????????????????????<addClasspath>true</addClasspath>??
  • ????????????????????????????<classpathPrefix>lib/</classpathPrefix>??
  • ????????????????????????????<!--<classpathLayoutType>custom</classpathLayoutType>?<customClasspathLayout>???
  • ????????????????????????????????lib/ artifact.groupId. {artifact.artifactId}.$${artifact.extension}?</customClasspathLayout>?-->??
  • ????????????????????????</manifest>??
  • ????????????????????????<manifestEntries>??
  • ????????????????????????????<Class-Path>./</Class-Path>??
  • ????????????????????????</manifestEntries>??
  • ????????????????????</archive>??
  • ????????????????????<excludes>??
  • ????????????????????????<exclude>config/**</exclude>??
  • ????????????????????</excludes>??
  • ????????????????</configuration>??
  • ????????????</plugin>??

  • 其中manifest的部分是核心,在可執行的jar文件中,打包后會在jar文件內的META-INF文件夾下,生成一個MANIFEST.MF文件,里面記錄了可執行文件的一些相關配置,比如像上面一段代碼中所配置的內容,這里面就配置了可執行jar文件未來讀取classpath的相對目錄位置在什么地方,以及引入的jar文件都有哪些,上面的配置就是classpath目錄是./(稍后會解釋為什么)?
    mainClass配置表示,哪個class作為程序的入口來執行?
    addClasspath配置表示,是否將依賴的classpath一起打包?
    classpathPrefix配置表示,依賴的classpath的前綴,也就是打包后生成的MANIFEST.MF文件里,引入的jar文件都會加上前綴,lib/,比如fastjson-1.2.7.jar,在mainfest文件里就會是lib/fastjson-1.2.7.jar?
    excludes配置表示,排除哪些文件夾不被打包進去?

    其實maven-jar-plugin主要就是配置了MANIFEST.MF這個文件而已,就是讓可執行文件知道自己怎么執行,加載哪些文件執行的描述,剩下的工作交由maven-assembly-plugin來處理?

    在pom文件中配置類似如下?下載?

    Xml代碼??下載?
  • <plugin>??
  • ????????????????<artifactId>maven-assembly-plugin</artifactId>??
  • ????????????????<configuration>??
  • ????????????????????<!--?not?append?assembly?id?in?release?file?name?-->??
  • ????????????????????<appendAssemblyId>false</appendAssemblyId>??
  • ????????????????????<descriptors>??
  • ????????????????????????<descriptor>src/main/build/package.xml</descriptor>??
  • ????????????????????</descriptors>??
  • ????????????????</configuration>??
  • ????????????????<executions>??
  • ????????????????????<execution>??
  • ????????????????????????<id>make-assembly</id>??
  • ????????????????????????<phase>package</phase>??
  • ????????????????????????<goals>??
  • ????????????????????????????<goal>single</goal>??
  • ????????????????????????</goals>??
  • ????????????????????</execution>??
  • ????????????????</executions>??
  • ????????????</plugin>??


  • 重點的就是package.xml的路徑了,使用maven-assembly-plugin的相關配置實際上都在這個文件里面?
    package.xml的文件內容?

    Xml代碼??下載?
  • <?xml?version="1.0"?encoding="UTF-8"?>??
  • <assembly?xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3"?xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"??
  • ??xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3?http://maven.apache.org/xsd/assembly-1.1.3.xsd">??
  • ????<id>package</id>??
  • ????<formats>??
  • ????????<format>zip</format>??
  • ????</formats>??
  • ????<includeBaseDirectory>true</includeBaseDirectory>??
  • ????<fileSets>??
  • ????????<fileSet>??
  • ????????????<directory>bin</directory>??
  • ????????????<outputDirectory>/</outputDirectory>??
  • ????????</fileSet>??
  • ????????<fileSet>??
  • ????????????<directory>src/main/resources</directory>??
  • ????????????<outputDirectory>/</outputDirectory>??
  • ????????</fileSet>??
  • ????????<fileSet>??
  • ????????????<directory>${project.build.directory}</directory>??
  • ????????????<outputDirectory>/</outputDirectory>??
  • ????????????<includes>??
  • ????????????????<include>*.jar</include>??
  • ????????????</includes>??
  • ????????</fileSet>??
  • ????</fileSets>??
  • ????<dependencySets>??
  • ????????<dependencySet>??
  • ????????????<outputDirectory>lib</outputDirectory>??
  • ????????????<scope>runtime</scope>??
  • <!--?????????????<unpack>false</unpack>?-->??
  • ????????????<excludes>??
  • <!--?????????????????<exclude>${project.name}-${project.version}</exclude>?-->??
  • ????????????????<exclude>${groupId}:${artifactId}</exclude>??
  • ????????????</excludes>??
  • ????????</dependencySet>??
  • ????</dependencySets>??
  • </assembly>??

  • 其他相關配置可參看官方文檔?
    [url]?
    http://maven.apache.org/plugins/maven-assembly-plugin/assembly.html#class_unpackOptions?
    [/url]?

    這里面我配置了,最終壓縮的文件格式,為zip,也就是最終打包出來的是一個zip的文件,然后發布到服務器上進行解壓部署,相關我要的配置都在這個壓縮包內,解壓即可直接使用?下載?

    下面的fileSets中配置了我需要將那些文件打包到我的最終壓縮包中,?
    我的配置文件包括了啟動腳本bin文件夾,里面放著shell的啟動腳本,?
    相關的配置文件src/main/resources,里面放著整個程序提取的properties等相關的配置文件?
    最終可運行的jar文件,使用了${project.build.directory}變量,也就是通過maven-jar-plugin生成的那個jar文件?
    dependencySets里面配置了依賴庫最終輸出到lib文件夾下,與上面的maven-jar-plugin配置生成的manifest文件路徑相對應,這樣可運行jar就會按照manifest的路徑來找相應的文件進行加載?下載?



    start.sh?

    Shell代碼??下載?
  • ###啟動??
  • ??
  • #!/bin/sh??
  • ??
  • moduleName="ps"??
  • pidPath="/var/run/$moduleName-tpid"??
  • ??
  • rm?-f?$pidPath??
  • ??
  • nohup?java?-jar?./$moduleName.jar?-server?-Xms1024m?-Xmx2048m?-Xss256k?>?./run.log?2>&1?&??
  • ??
  • echo?$!?>?$pidPath??

  • stop.sh?

    Shell代碼??下載?
  • ###停止??
  • ??
  • moduleName="ps"??
  • ??
  • tpid=`cat?/var/run/$moduleName-tpid?|?awk?'{print?$1}'`??
  • tpid=`ps?-aef?|?grep?$tpid?|?awk?'{print?$2}'?|grep?$tpid`??
  • if?[?${tpid}?];?then??
  • kill?-9?$tpid??
  • fi??
  • 轉載于:https://www.cnblogs.com/wangjing666/p/8044282.html

    總結

    以上是生活随笔為你收集整理的通过Maven构建打包Spring boot,并将config配置文件提取到jar文件外的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。