maven打生產(chǎn)環(huán)境可執(zhí)行包的實(shí)現(xiàn)
一、程序?yàn)槭裁匆虬?/h2>
程序打包的主要目的是將項(xiàng)目的源代碼、依賴庫和其他資源打包成一個(gè)可執(zhí)行的文件或者部署包,方便程序的發(fā)布和部署。以下是一些打包程序的重要理由:
方便部署和分發(fā):打包后的程序可以作為一個(gè)獨(dú)立的實(shí)體,方便復(fù)制和部署到不同的環(huán)境中,包括開發(fā)、測(cè)試和生產(chǎn)環(huán)境。打包后的程序通常包含了所有需要的依賴和配置,并且已經(jīng)做好了預(yù)處理(如編譯、壓縮、優(yōu)化等),減少了部署和配置的復(fù)雜性。
保護(hù)源代碼:打包后的程序通常會(huì)將源代碼進(jìn)行編譯和打包,以二進(jìn)制形式進(jìn)行發(fā)布。這樣可以保護(hù)源代碼的安全性,防止他人對(duì)源代碼的篡改。
管理依賴關(guān)系:在打包過程中,Maven 或其他構(gòu)建工具可以自動(dòng)將項(xiàng)目所需的依賴庫打包到最終的可執(zhí)行文件中。這樣可以簡(jiǎn)化項(xiàng)目的依賴管理,減少對(duì)外部庫和組件的依賴,提高了項(xiàng)目的獨(dú)立性和可移植性。
二,使用maven打包java程序
maven內(nèi)置很多插件,可以非常方便打包。
2.1使用maven-resources-plugin管理資源
maven-resources-plugin插件負(fù)責(zé)復(fù)制過濾資源文件到制定目錄。程序項(xiàng)目的配置可分為兩種,一種是靜態(tài)配置,用于程序內(nèi)部,即使重復(fù)部署也無需改動(dòng),比如log4j,定時(shí)任務(wù)配置quartz等。另外一種是動(dòng)態(tài)配置,用于運(yùn)維部署動(dòng)態(tài)調(diào)整的。
2.1.1maven處理靜態(tài)資源
maven對(duì)于靜態(tài)資源,一般無需額外處理。我們可以把靜態(tài)資源放置在maven項(xiàng)目的src/main/resources目錄。程序打包的時(shí)候就會(huì)默認(rèn)處理。
2.1.2maven處理動(dòng)態(tài)資源
對(duì)于動(dòng)態(tài)資源,我們一般會(huì)在程序源代碼的同級(jí)目錄新增一個(gè)文件夾,例如叫做config,用來放置所有的動(dòng)態(tài)資源。典型的動(dòng)態(tài)有數(shù)據(jù)庫配置jdbc,socket配置等等。如果同樣一份代碼,需要在很多機(jī)器部署,例如,游戲服務(wù)器往往有好幾千個(gè)游戲區(qū),每個(gè)游戲區(qū)的代碼都是一樣的,只是動(dòng)態(tài)資源不一樣。運(yùn)維在部署的時(shí)候,只需要修改動(dòng)態(tài)配置。還可以使用諸如ansible之類自動(dòng)化運(yùn)維工具,做到一鍵部署全部服務(wù)器。
例如jforgame,把動(dòng)態(tài)資源放置在config文件,如下所示:
maven-resources-plugin插件配置,把config配置全部拷貝到j(luò)ar包輸出目錄。
<plugin> <artifactId>maven-resources-plugin</artifactId> <version>2.6</version> <executions> <execution> <!-- 配置文件要跟jar包在同一個(gè)目錄 --> <id>copy-config</id> <phase>package</phase> <goals> <goal>copy-resources</goal> </goals> <configuration> <outputDirectory>${project.build.directory}/configs</outputDirectory> <resources> <resource> <directory>configs/</directory> </resource> </resources> </configuration> </execution> </executions> </plugin>
2.2使用maven-dependency-plugin復(fù)制依賴
程序在部署的時(shí)候一般采用“瘦客戶端”模式,可執(zhí)行包內(nèi)部只包含業(yè)務(wù)代碼,不包含第三方依賴。這樣可以減小目標(biāo)包的體積(第三方依賴一般不變,只在初次部署使用),加快啟動(dòng)速度。
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <executions> <execution> <id>copy-jars</id> <phase>package</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <outputDirectory>${project.build.directory}/libs</outputDirectory> </configuration> </execution> </executions> </plugin>
2.3使用maven-jar-plugin打可執(zhí)行包
前面兩個(gè)插件都是處理資源的,這個(gè)插件才是真正將代碼進(jìn)行打包的,我們先來通過配置進(jìn)行說明。
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>3.1.0</version> <configuration> <archive> <manifestEntries> <Class-Path>configs/</Class-Path> </manifestEntries> <manifest> <addClasspath>true</addClasspath> <classpathPrefix>libs/</classpathPrefix> <mainClass>jforgame.demo.ServerStartup</mainClass> </manifest> </archive> </configuration> </plugin>
<mainClass>作用:申明jar包啟動(dòng)類
<Class-Path>作用:把自定義的config動(dòng)態(tài)配置文件夾添加到MANIFEST.MF的Class-Path標(biāo)簽。
<addClasspath>+<classpathPrefix>作用:把maven-dependency-plugin引入的libs下所有第三方依賴統(tǒng)一添加到MANIFEST.MF的Class-Path標(biāo)簽。相關(guān)配置放在MANIFEST.MF文件(用rar程序打開目標(biāo)包)。
到此這篇關(guān)于maven打生產(chǎn)環(huán)境可執(zhí)行包的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)maven打生產(chǎn)環(huán)境可執(zhí)行包內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
springboot項(xiàng)目整合注冊(cè)功能模塊開發(fā)實(shí)戰(zhàn)
這篇文章主要介紹了springboot項(xiàng)目整合注冊(cè)功能模塊開發(fā)實(shí)戰(zhàn),在用戶的注冊(cè)是首先需要查詢當(dāng)前的用戶名是否存在,如果存在則不能進(jìn)行注冊(cè),相當(dāng)于一個(gè)查詢語句,本文通過實(shí)例代碼詳細(xì)講解,需要的朋友可以參考下2022-11-11java實(shí)體類轉(zhuǎn)json時(shí)null值不要轉(zhuǎn)為"null"問題
這篇文章主要介紹了java實(shí)體類轉(zhuǎn)json時(shí)null值不要轉(zhuǎn)為“null”問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11servlet下載文件實(shí)現(xiàn)代碼詳解(五)
這篇文章主要為大家詳細(xì)介紹了servlet下載文件的實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-09-09