用Maven部署war包到遠(yuǎn)程Tomcat服務(wù)器

過(guò)去我們發(fā)布一個(gè)Java Web程序通常的做法就是把它打成一個(gè)war包,然后用SSH這樣的工具把它上傳到服務(wù)器,并放到相應(yīng)的目錄里,讓Tomcat自動(dòng)去解包,完成部署。

很顯然,這樣做不夠方便,且我們?cè)谟肧SH把文件拽上去的時(shí)候很可能會(huì)搞錯(cuò)。(當(dāng)然了大廠就不會(huì)有這樣的問(wèn)題,因?yàn)槿思矣羞\(yùn)維團(tuán)隊(duì)專門來(lái)干這個(gè)事情,哈哈)

現(xiàn)在我要的是:一行命令部署到本地服務(wù)器,在本地測(cè)試一番,沒(méi)有問(wèn)題的話就一行命令部署到正式服務(wù)器,另外正式服務(wù)器的密碼只有我自己知道,只有我能執(zhí)行這個(gè)部署(其它開發(fā)組員不知道正式服務(wù)器密碼)。

OK,我們先要在Maven(POM.XML)中引入這個(gè)插件:

<build>

<plugins>

<plugin>

<groupId>org.apache.tomcat.maven</groupId>

<artifactId>tomcat7-maven-plugin</artifactId>

<version>2.2</version>

</plugin>

</plugins>

</build>

這個(gè)叫“tomcat7-maven-plugin”的插件是利用Tomcat的“manager”模塊來(lái)實(shí)現(xiàn)war包部署的,所以必須確保Tomcat安裝了Manager模塊,(看看webapp下有沒(méi)有Manager目錄)它雖然名字帶“tomcat7”,但Tomcat8也適用,我用的就是Tomcat8。接下來(lái)我們對(duì)本地的Tomcat的manager模塊進(jìn)行一些配置,打開本地Tomcat的tomcat-users.xml文件,增加這樣的配置:

1<user username="deployer"?password="654321"?roles="manager-script"/>

這個(gè)叫“deployer”的用戶,角色設(shè)定為“manager-script”,表明他可以使用Tomcat的manager模塊的后臺(tái)腳本管理,BTW,如果角色為“manager-gui”則表示此用戶可使用manager模塊的前端網(wǎng)頁(yè)管理。然后對(duì)正式服務(wù)器也做一個(gè)類似的配置。

接下來(lái)完善一下tomcat7-maven-plugin的配置:

<properties>

<warPackageName>MyWebAppDemo</warPackageName>

<tomcat.deploy.server>localTestServer</tomcat.deploy.server>

<tomcat.deploy.serverUrl>http://localhost/manager/text</tomcat.deploy.serverUrl>

</properties>

<profiles>

<profile>

<id>deploy2production</id>

<properties>

<tomcat.deploy.server>productionServer</tomcat.deploy.server>

<tomcat.deploy.serverUrl>http://120.26.93.30:8080/manager/text</tomcat.deploy.serverUrl>

</properties>

</profile>

</profiles>

<build>

<finalName>${warPackageName}</finalName>

<plugins>

<plugin>

<groupId>org.apache.tomcat.maven</groupId>

<artifactId>tomcat7-maven-plugin</artifactId>

<version>2.2</version>

<configuration>

<server>${tomcat.deploy.server}</server>

<url>${tomcat.deploy.serverUrl}</url>

<path>/${warPackageName}</path>

</configuration>

</plugin>

</plugins>

</build>

OK,現(xiàn)在來(lái)講解一番:

Configuration-Server

Configuration中的server是個(gè)變量,叫tomcat.deploy.server,我并沒(méi)有寫死,因?yàn)槲覀円獙AR包部署到不同服務(wù)器去,而這個(gè)變量則由前面的properties來(lái)確定,我們可以看到,properties中,tomcat.deploy.server被賦值為localTestServer,這就是我們的默認(rèn)值,但通過(guò)調(diào)整Maven的運(yùn)行參數(shù),我們可以將它修改為別的值,那么localTestServer又表示什么呢?我前面說(shuō)了,服務(wù)器的密碼是自己定的,而且不希望別人知道,別的開發(fā)組員能各自決定自己本地服務(wù)器的密碼,但他們無(wú)需知道我的密碼,所以這個(gè)localTestServer的相關(guān)的內(nèi)容是定義在“~/.m2/settings.xml”中的,在Windows7下通常就是在“C:\Users\(用戶名)\.m2\settings.xml”這里。打開這個(gè)配置文件,在servers中增加兩個(gè)server,也就是我們要將程序部署上去的兩個(gè)server。

<servers>

<server>

<id>productionServer</id>

<username>deployer</username>

<password>123456</password>

</server>

<server>

<id>localTestServer</id>

<username>deployer</username>

<password>654321</password>

</server>

</servers>

這個(gè)貌似沒(méi)什么好說(shuō)了,這個(gè)配置非常的self-explanatory。

Configuration-url

Configuration中的url也是個(gè)變量,很顯然,我也不能把它寫死,但它不像用戶名和密碼那么敏感,所以直接出現(xiàn)在POM.XML中也無(wú)所謂,默認(rèn)情況下,其值是“http://localhost/manager/text”,這個(gè)地址便是Tomcat的Manager模塊的后臺(tái)腳本入口,url的值同樣可以通過(guò)Maven的運(yùn)行參數(shù)調(diào)整。

Configuration-path

要將WAR包部署到哪里去?要指定一個(gè)path,如果path為“/”,也就是部署為傳說(shuō)中的ROOT.WAR,這次我們指定了一個(gè)名為MyWebAppDemo的path。部署成功之后可以通過(guò)http://localhost/MyWebAppDemo來(lái)訪問(wèn)。

profile參數(shù)

也就是前面提到的Maven的參數(shù),這里我們定了一個(gè)參數(shù),叫deploy2production,在運(yùn)行mvn的時(shí)候帶上這個(gè)參數(shù)的話,就會(huì)用參數(shù)中的tomcat.deploy.server,tomcat.deploy.serverUrl來(lái)取代默認(rèn)的值。

OK,所有的工作都完成了,就剩下部署了。開始吧:

1mvn tomcat7:redeploy

為什么是redeploy而不是deploy?因?yàn)橛胐eploy的話在我這里會(huì)出現(xiàn)些問(wèn)題,具體啥問(wèn)題就不說(shuō)了,也許你那里正常,如果沒(méi)問(wèn)題的話用deploy也行啊。執(zhí)行完這個(gè)之后,我們的程序就被部署到本地Tomcat服務(wù)器上了。再來(lái)看,這是帶參數(shù)的mvn:

1mvn tomcat7:redeploy -Pdeploy2production

這么一下,我們的程序就被部署到正式服務(wù)器去了。

如果你想把程序移除掉,那很簡(jiǎn)單,只需要使用undeploy來(lái)代替redeploy即可。

歡迎工作一到五年的Java工程師朋友們加入Java架構(gòu)開發(fā): 854393687

群內(nèi)提供免費(fèi)的Java架構(gòu)學(xué)習(xí)資料(里面有高可用、高并發(fā)、高性能及分布式、Jvm性能調(diào)優(yōu)、Spring源碼,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多個(gè)知識(shí)點(diǎn)的架構(gòu)資料)合理利用自己每一分每一秒的時(shí)間來(lái)學(xué)習(xí)提升自己,不要再用"沒(méi)有時(shí)間“來(lái)掩飾自己思想上的懶惰!趁年輕,使勁拼,給未來(lái)的自己一個(gè)交代!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容