Maven項目遠程部署到Tomcat


目錄

概述

Maven本身不提供任何插件將war包發布到遠程站點,例如Tomcat這樣類似的Servlet容器,但是,Apache Tomcat本身提供了一個Maven插件:

<dependency>
    <groupId>org.apache.tomcat.maven</groupId>
    <artifactId>tomcat7-maven-plugin</artifactId>
    <version>2.1</version>
</dependency>

tomcat7-maven-plugin是很久以前的插件版本,默認支持到Tomcat7,但是對於目前最新的Tomcat9同樣可以使用該插件(雖然插件的ArtifactId的名字為tomcat7很奇怪)

插件介紹的官網文檔為:

http://tomcat.apache.org/maven-plugin-2.1/index.html

一、Tomcat插件支持的目標

默認使用的Tomcat7插件支持多種目標,

調用格式如下:

mvn tomcat7:[goal]

例如,遠程部署一個項目到Tomcat容器:

mvn tomcat7:deploy

文檔如下:

目標 描述
deploy 部署war包到Tomcat中
deploy-only 不經過package階段,直接將包部署到Tomcat中(傳輸現成的)
exec-war 創建一個包含必要Apache Tomcat類庫的自可執行jar包,這允許使
用類似'jar -jar mywebapp.jar'直接運行APP而不需要Tomcat實例
exec-war-only 同上exec-war,但是不使用package階段
help 展示所有的幫助信息
redeploy 重新部署war包到Tomcat(等同於deploy目標加上update=true參數)
redeploy-only 重新部署war包到Tomcat但是不經過package階段(等同於deploy目
標加上update=true參數)
run 將當前項目作為動態web程序(exploded),使用嵌入的Tomcat服務器運行
run-war 將當前項目作為打包后的war(war),使用嵌入的Tomcat服務器運行
run-war-only 同run-war,但是不使用package階段
shutdown 關閉所有已經開始的嵌入式Tomcat服務器
standalone-war 創建嵌入Tomcat的可執行war,並且可以在別的地方部署
standalone-war-only 同standalone-war但是不使用package階段
undeploy 從Tomcat服務器中,取消部署某一個項目

二、系統要求及插件引入

2.1 系統要求

要求如下:

組件 Maven JDK 內存 硬盤
要求 2.0+ 1.5+ 無要求 無要求

2.2 引入插件

引入方式:

<project>
  ...
  <build>
    <!-- 在POM中或父POM中使用這樣的插件(IDEA會出現對應的插件欄) -->
    <plugins>
      <plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat7-maven-plugin</artifactId>
        <version>2.1</version>
      </plugin>
      ...
    </plugins>
  </build>
  ...
</project>

三、遠程部署war到tomcat

命令格式:

mvn tomcat7:deploy

3.1 添加tomcat管理角色

修改tomcat的用戶配置文件

%TOMCAT_HOME%/conf/tomcat-users.xml,添加一個用戶:

<?xml version="1.0" encoding="UTF-8"?>
<tomcat-users xmlns="http://tomcat.apache.org/xml"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"
              version="1.0">
    <role rolename="manager-gui" />
    <role rolename="manager-script"/>
    <user username="username" password="password" roles="manager-gui,manager-script"/>
</tomcat-users>

注意!可以給該用戶添加多個角色,為了遠程部署,至少需要這個角色:

  • manager-script

當然,也可以開啟manager-gui用於可視化管理

3.2 本地Maven設置Server

為了讓本地發布的Maven可以找到對應的服務器並完成鑒權

需要修改settings.xml,並添加服務器,這里的賬號、密碼需要和部署的tomcat服務器配置的一致

<servers>
    <server>
		<id>tomcatServer</id>
		<username>username</username>
		<password>password</password>
	</server>
</servers>

3.3 項目配置Tomcat插件

<build>
    <!-- 在POM中或父POM中使用這樣的插件(IDEA會出現對應的插件欄) -->
    <plugins>
    	<plugin>
    		<groupId>org.apache.tomcat.maven</groupId>
    		<artifactId>tomcat7-maven-plugin</artifactId>
    		<version>2.2</version>
    		<configuration>
    			<url>http://{yourIP}:8080/manager/text</url>
    			<server>tomcatServer</server>
                <update>true</update>
    			<path>/${project.artifactId}</path>
    		</configuration>
    	</plugin>
      ...
    </plugins>
</build>

此處指定了插件所使用的 切記需要一致(setting.xml和pom.xml)

3.4 插件參數說明

tomcat7-maven-plugin為每個目標提供了多個參數,每個目標可以有相關的配置,具體說明可參考官方文檔:

http://tomcat.apache.org/maven-plugin-2.1/tomcat7-maven-plugin/plugin-info.html

3.4.1 必選參數

以下參數必選,但是可以在pom中空缺,空缺時將采用默認值

名稱 描述 默認值
charset 在與Tomcat Manager通信是的URL編
碼字符集
ISO-8859-1
mode 部署的模式,值可為:war,context,both war
path 應用程序運行的上下文路徑,必須以'/'開始 /${project.artifactId}
update 當部署已存在的應用時,是否自動
undeploy該應用
false
url Tomcat Manager實例使用的全路徑 http://localhost:8080
/manager/text
warFile 部署warFile的路徑 ${project.build.directory}
/${project.build.finalName}.war

3.4.2 可選參數

對於個性化的需求,tomcat7插件提供了可配置的參數

名稱 描述
contextFile Tomcat的context的XML路徑,對於mode=war不適用,默認為
${project.build.directory}/${project.build.finalName}/
META-INF/context.xml
ignorePackaging 如果設置為true,忽略類型不是war的項目
username 部署到Tomcat的username
password 部署到Tomcat的password
server 指定Maven的setting.xml中配置的server id用於Tomcat認證
tag 應用程序在Tomcat中使用的標簽的名字

3.5 運行結果

調用:mvn tomcat7:deploy命令得到下圖:

成功快速部署到tomcat中

四、遠程undeploy

此外,如果快速卸載(undeploy)Tomcat服務器的項目,使用:

mvn tomcat7:undeploy

效果如下:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM