過(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è)交代!