tomcat7-maven-plugin-用于部署WAR的Tomcat Maven插件

时间:2020-02-23 14:35:38  来源:igfitidea点击:

今天,我们将研究Tomcat Maven插件(tomcat7-maven-plugin),该插件可帮助我们轻松地将WAR文件部署到Tomcat。

Tomcat Maven部署

最近,我正在开发一个Web应用程序,并在完成构建后,将复制的WAR文件复制到Tomcat webapps目录中。
这很耗时,很无聊,有时我曾经错过了更新的WAR文件来复制并在以后注意到它。

然后,我决定寻找一些配置,通过这些配置可以配置Maven构建,以将生成的WAR文件自动部署到tomcat中。

我的第一种方法是使用Maven插件将生成的WAR文件复制到tomcat部署目录。

例如,以下是我的简单Web应用程序的pom.xml文件,我删除了所有不需要的内容以使其清晰可见。

<project xmlns="https://maven.apache.org/POM/4.0.0" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="https://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>MyWebapp</groupId>
	<artifactId>MyWebapp</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>war</packaging>
	<build>
		<sourceDirectory>src</sourceDirectory>
		<plugins>
			<plugin>
				<artifactId>maven-war-plugin</artifactId>
				<version>2.3</version>
				<configuration>
					<warSourceDirectory>WebContent</warSourceDirectory>
					<failOnMissingWebXml>false</failOnMissingWebXml>
				</configuration>
			</plugin>
			<plugin>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.1</version>
				<configuration>
					<source>1.7</source>
					<target>1.7</target>
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>

我使用了" maven-antrun-plugin"为"集成测试"阶段添加了另一个任务,该阶段是将WAR文件复制到本地tomcat目录中。

<project xmlns="https://maven.apache.org/POM/4.0.0" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="https://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>MyWebapp</groupId>
	<artifactId>MyWebapp</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>war</packaging>
	
	<properties>
		<deployFolder>/Users/hyman/Dev_Softwares/apache-tomcat-7.0.32/webapps</deployFolder>
	</properties>
	
	<build>
		<sourceDirectory>src</sourceDirectory>
		<plugins>
			<plugin>
				<artifactId>maven-war-plugin</artifactId>
				<version>2.3</version>
				<configuration>
					<warSourceDirectory>WebContent</warSourceDirectory>
					<failOnMissingWebXml>false</failOnMissingWebXml>
				</configuration>
			</plugin>
			<plugin>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.1</version>
				<configuration>
					<source>1.7</source>
					<target>1.7</target>
				</configuration>
			</plugin>
			
			<plugin>
				<artifactId>maven-antrun-plugin</artifactId>
				<executions>
					<execution>
						<phase>integration-test</phase>
						<configuration>
							<tasks>
								<copy file="target/${pom.build.finalName}.war" tofile="${deployFolder}/${pom.build.finalName}.war" 
							</tasks>
						</configuration>
						<goals>
							<goal>run</goal>
						</goals>
					</execution>
				</executions>
			</plugin>
		</plugins>
		<finalName>${project.artifactId}</finalName>
	</build>
</project>

更改非常简单,创建一个属性来定义tomcat的部署目录,并添加finalName配置以跳过WAR文件中的版本详细信息。

mvn clean Integration-test软件包–它将生成WAR文件并也部署到tomcat中。

mvn clean package –它只会构建项目,不会尝试将其部署到tomcat容器中。

上面的方法解决了我的问题,但是有两个缺点。

  • 由于tomcat deploy文件夹是硬编码在pom.xml中的,因此,如果我更改了tomcat服务器位置,则也必须在此处进行更改。
    另外,由于这是我的用户配置,因此无法将此代码签入存储库。

  • 我无法使用这种方法将应用程序部署到任何远程服务器中。

Tomcat7 Maven插件

由于上述缺点,我在网上寻找更好的解决方案,并发现已经有一个用于此工作的插件Tomcat Maven Plugin。

我们可以将此插件与一些配置设置一起使用,以使用其管理控制台API将我们的应用程序部署到Tomcat服务器中。

Tomcat Maven插件

在使用Apache Tomcat Maven插件之前,我们需要执行一些配置设置。
让我们一一看一下这些配置。
请注意,我使用的是Tomcat-7,如果您使用的是其他版本,则可能需要相应地更改某些配置。

  • 在Tomcat 7中添加管理员角色和用户:我们需要在" tomcat-users.xml"文件中添加" manager-gui"和" manager-script"角色,并创建一个具有这些角色的用户。
    只需在您的tomcat-users.xml文件中添加以下几行,然后重新启动服务器即可。
    TOMCAT-HOME/conf/tomcat-users.xml。

  • 将服务器添加到Maven settings.xml文件:下一步是在maven settings.xml文件中添加服务器,如下所示。
    $HOME/.m2/settings.xml。

请注意,用户名和密码应与上一步中配置的相同。

tomcat7-maven-plugin示例

  • Maven项目pom.xml更改:最后一步是在Web应用程序pom.xml文件中配置Tomcat Maven插件。
    只需将以下行添加到pom.xml插件部分。

tomcat6-maven-plugin示例如果使用的是Tomcat-6,则应改用以下配置。

就是这样,现在我们可以使用以下命令通过maven命令部署,取消部署和重新部署我们的应用程序。

Tomcat 7 Maven插件部署命令

  • mvn tomcat7:部署
  • mvn tomcat7:取消部署
  • mvn tomcat7:重新部署

Tomcat 6 Maven插件部署命令

对于Tomcat-6,应使用以下命令。

  • mvn tomcat6:部署
  • mvn tomcat6:取消部署
  • mvn tomcat6:重新部署

以下是deploy命令为tomcat7-maven-plugin生成的示例输出。

<role rolename="manager-gui" 
<role rolename="manager-script" 
<user username="tomcat" password="tomcat" roles="manager-gui,manager-script" 

您可以转到Tomcat Manager应用程序并确认已部署该应用程序,也可以直接在浏览器中访问该应用程序以进行确认。