用Maven部署war包到遠程Tomcat服務器

用Maven部署war包到遠程Tomcat服務器

過去咱們發佈一個Java Web程序一般的作法就是把它打成一個war包,而後用SSH這樣的工具把它上傳到服務器,並放到相應的目錄裏,讓Tomcat自動去解包,完成部署。html

很顯然,這樣作不夠方便,且咱們在用SSH把文件拽上去的時候極可能會搞錯。(固然了大廠就不會有這樣的問題,由於人家有運維團隊專門來幹這個事情,哈哈)前端

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

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

複製代碼

<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文件,增長這樣的配置:tomcat

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

這個叫「deployer」的用戶,角色設定爲「manager-script」,代表他可使用Tomcat的manager模塊的後臺腳本管理,BTW,若是角色爲「manager-gui」則表示此用戶可以使用manager模塊的前端網頁管理。而後對正式服務器也作一個相似的配置。服務器

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

複製代碼

<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,如今來說解一番:運維

Configuration-Server

Configuration中的server是個變量,叫tomcat.deploy.server,我並無寫死,由於咱們要將WAR包部署到不一樣服務器去,而這個變量則由前面的properties來肯定,咱們能夠看到,properties中,tomcat.deploy.server被賦值爲localTestServer,這就是咱們的默認值,但經過調整Maven的運行參數,咱們能夠將它修改成別的值,那麼localTestServer又表示什麼呢?我前面說了,服務器的密碼是本身定的,並且不但願別人知道,別的開發組員能各自決定本身本地服務器的密碼,但他們無需知道個人密碼,因此這個localTestServer的相關的內容是定義在「~/.m2/settings.xml」中的,在Windows7下一般就是在「C:\Users\(用戶名)\.m2\settings.xml」這裏。打開這個配置文件,在servers中增長兩個server,也就是咱們要將程序部署上去的兩個server。webapp

複製代碼

<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。maven

Configuration-url

Configuration中的url也是個變量,很顯然,我也不能把它寫死,但它不像用戶名和密碼那麼敏感,因此直接出如今POM.XML中也無所謂,默認狀況下,其值是「http://localhost/manager/text」,這個地址即是Tomcat的Manager模塊的後臺腳本入口,url的值一樣能夠經過Maven的運行參數調整。

Configuration-path

要將WAR包部署到哪裏去?要指定一個path,若是path爲「/」,也就是部署爲傳說中的ROOT.WAR,此次咱們指定了一個名爲MyWebAppDemo的path。部署成功以後能夠經過http://localhost/MyWebAppDemo來訪問。

profile參數

也就是前面提到的Maven的參數,這裏咱們定了一個參數,叫deploy2production,在運行mvn的時候帶上這個參數的話,就會用參數中的tomcat.deploy.server,tomcat.deploy.serverUrl來取代默認的值。

OK,全部的工做都完成了,就剩下部署了。開始吧:

mvn tomcat7:redeploy

爲何是redeploy而不是deploy?由於用deploy的話在我這裏會出現些問題,具體啥問題就不說了,也許你那裏正常,若是沒問題的話用deploy也行啊。執行完這個以後,咱們的程序就被部署到本地Tomcat服務器上了。再來看,這是帶參數的mvn:

mvn tomcat7:redeploy -Pdeploy2production

這麼一下,咱們的程序就被部署到正式服務器去了。

若是你想把程序移除掉,那很簡單,只須要使用undeploy來代替redeploy便可。

相關文章
相關標籤/搜索