用Maven部署war包到遠端Tomcat伺服器

germo發表於2021-09-09

過去我們釋出一個Java Web程式通常的做法就是把它打成一個war包,然後用SSH這樣的工具把它上傳到伺服器,並放到相應的目錄裡,讓Tomcat自動去解包,完成部署。

很顯然,這樣做不夠方便,且我們在用SSH把檔案拽上去的時候很可能會搞錯。(當然了大廠就不會有這樣的問題,因為人家有運維團隊專門來幹這個事情,哈哈)

現在我要的是:一行命令部署到本地伺服器,在本地測試一番,沒有問題的話就一行命令部署到正式伺服器,另外正式伺服器的密碼只有我自己知道,只有我能執行這個部署(其它開發組員不知道正式伺服器密碼)。

OK,我們先要在Maven(POM.XML)中引入這個外掛:

<build>

<plugins>

<plugin>

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

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

<version>2.2</version>

</plugin>

</plugins>

</build>

這個叫“tomcat7-maven-plugin”的外掛是利用Tomcat的“manager”模組來實現war包部署的,所以必須確保Tomcat安裝了Manager模組,(看看webapp下有沒有Manager目錄)它雖然名字帶“tomcat7”,但Tomcat8也適用,我用的就是Tomcat8。接下來我們對本地的Tomcat的manager模組進行一些配置,開啟本地Tomcat的tomcat-users.xml檔案,增加這樣的配置:

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

這個叫“deployer”的使用者,角色設定為“manager-script”,表明他可以使用Tomcat的manager模組的後臺指令碼管理,BTW,如果角色為“manager-gui”則表示此使用者可使用manager模組的前端網頁管理。然後對正式伺服器也做一個類似的配置。

接下來完善一下tomcat7-maven-plugin的配置:

<properties>

<warPackageName>MyDemo</warPackageName>

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

<tomcat.deploy.serverUrl>

</properties>

<profiles>

<profile>

<id>deploy2production</id>

<properties>

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

<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,現在來講解一番:

Configuration-Server

Configuration中的server是個變數,叫tomcat.deploy.server,我並沒有寫死,因為我們要將WAR包部署到不同伺服器去,而這個變數則由前面的properties來確定,我們可以看到,properties中,tomcat.deploy.server被賦值為localTestServer,這就是我們的預設值,但透過調整Maven的執行引數,我們可以將它修改為別的值,那麼localTestServer又表示什麼呢?我前面說了,伺服器的密碼是自己定的,而且不希望別人知道,別的開發組員能各自決定自己本地伺服器的密碼,但他們無需知道我的密碼,所以這個localTestServer的相關的內容是定義在“~/.m2/settings.xml”中的,在Windows7下通常就是在“C:Users(使用者名稱).m2settings.xml”這裡。開啟這個配置檔案,在servers中增加兩個server,也就是我們要將程式部署上去的兩個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>

這個貌似沒什麼好說了,這個配置非常的self-explanatory。

Configuration-url

Configuration中的url也是個變數,很顯然,我也不能把它寫死,但它不像使用者名稱和密碼那麼敏感,所以直接出現在POM.XML中也無所謂,預設情況下,其值是“”,這個地址便是Tomcat的Manager模組的後臺指令碼入口,url的值同樣可以透過Maven的執行引數調整。

Configuration-path

要將WAR包部署到哪裡去?要指定一個path,如果path為“/”,也就是部署為傳說中的ROOT.WAR,這次我們指定了一個名為MyDemo的path。部署成功之後可以透過來訪問。

profile引數

也就是前面提到的Maven的引數,這裡我們定了一個引數,叫deploy2production,在執行mvn的時候帶上這個引數的話,就會用引數中的tomcat.deploy.server,tomcat.deploy.serverUrl來取代預設的值。

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

1mvn tomcat7:redeploy

為什麼是redeploy而不是deploy?因為用deploy的話在我這裡會出現些問題,具體啥問題就不說了,也許你那裡正常,如果沒問題的話用deploy也行啊。執行完這個之後,我們的程式就被部署到本地Tomcat伺服器上了。再來看,這是帶引數的mvn:



作者:java菜
連結:


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/1868/viewspace-2818641/,如需轉載,請註明出處,否則將追究法律責任。

相關文章