用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便可。

相关文章
相关标签/搜索