Maven 进行远程部署
使用 Maven 进行远程部署和热部署到 Tomcat 服务器,可以通过 Maven 的 cargo
插件或 tomcat7-maven-plugin
插件来实现。以下是使用 tomcat7-maven-plugin
插件的详细步骤。
1. 配置 pom.xml
在你的 Maven 项目中,编辑 pom.xml
文件,添加 tomcat7-maven-plugin
插件的配置:
<project>
...
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<url>http://192.168.1.100:8080/manager/text</url> <!-- 这里替换为你的远程服务器 IP -->
<server>tomcat</server>
<path>/your-app-context</path> <!-- 替换为你的应用程序上下文路径 -->
</configuration>
</plugin>
</plugins>
</build>
...
</project>
<url>内的后缀/manager/text必须有
<path>内一般就是你的包名/项目名
2. 配置 Tomcat 用户
在远程 Tomcat 服务器上,确保 conf/tomcat-users.xml
文件中包含正确的用户和角色配置:
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<user username="deploy" password="deploy_password" roles="manager-gui,manager-script"/>
3.在 settings.xml
中配置服务器认证信息
<servers>
标签通常放在 Maven 的 settings.xml
文件中,而不是 pom.xml
中。settings.xml
文件是 Maven 的全局配置文件,通常位于你的 Maven 安装目录下的 conf
目录中,或用户目录下的 .m2
目录中。
在 settings.xml
文件中配置服务器认证信息如下:
-
找到并编辑你的
settings.xml
文件:- 全局配置:
$MAVEN_HOME/conf/settings.xml
- 用户配置:
~/.m2/settings.xml
- 全局配置:
-
在
settings.xml
文件中添加服务器认证信息:
<settings>
...
<servers>
<server>
<id>tomcat</id>
<username>deploy</username>
<password>deploy_password</password>
</server>
</servers>
...
</settings>
在以上配置中:
<url>
:远程 Tomcat 服务器的 URL,替换为实际的服务器地址和端口。<server>
:匹配settings.xml
中的<id>
,这里填写tomcat
。<path>
:应用程序上下文路径。
部署和热部署命令
在命令行中执行以下命令进行部署:
mvn tomcat7:deploy
如果你需要热部署,可以使用:
mvn tomcat7:redeploy
若不想配置setting.xml 可在pom.xml中直接配置:
<project>
...
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<url>http://<remote_server_ip>:8080/manager/text</url>
<path>/your-app-context</path>
<username>deploy</username>
<password>deploy_password</password>
</configuration>
</plugin>
</plugins>
</build>
...
</project>
错误处理
部署过程中极大可能出现:Connection reset by peer: socket write error 错误:极有可能是tomcat等待时间过小;检查 Tomcat 配置
在 Tomcat 的 conf/server.xml
中增加或修改以下配置,以增加上传的超时时间和文件大小限制:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
maxPostSize="0"
URIEncoding="UTF-8"
maxHttpHeaderSize="65536"
maxSwallowSize="-1"
disableUploadTimeout="true"/>
maven生命各周期
Maven 是一个强大的项目管理和构建工具,采用了一种基于生命周期的构建模型。Maven 的生命周期由一系列的阶段组成,每个阶段执行一组特定的任务。这些阶段有助于确保构建过程的顺序和一致性。
以下是 Maven 构建生命周期的详细解释:
1. 清理生命周期(Clean Lifecycle)
清理生命周期包含清理项目生成的临时文件和目录的阶段。
- pre-clean:执行一些需要在实际清理之前完成的工作。
- clean:移除上一次构建生成的所有文件。
- post-clean:执行一些需要在清理之后立刻完成的工作。
2. 默认生命周期(Default Lifecycle)
默认生命周期是 Maven 构建的核心部分,包含所有与编译、测试、打包、安装和部署相关的阶段。以下是默认生命周期中的主要阶段:
- validate:验证项目是否正确且所有必要的信息都可用。
- initialize:初始化构建状态,例如设置属性或创建目录。
- generate-sources:生成项目所需的任何源代码。
- process-sources:处理源代码,例如过滤资源文件。
- generate-resources:生成项目所需的任何资源。
- process-resources:处理资源文件,将资源文件复制到目标目录。
- compile:编译项目的源代码。
- process-classes:对编译生成的类文件进行后处理。
- generate-test-sources:生成项目测试所需的任何源代码。
- process-test-sources:处理测试源代码。
- generate-test-resources:生成项目测试所需的任何资源。
- process-test-resources:处理测试资源文件,将测试资源文件复制到目标测试目录。
- test-compile:编译测试源代码。
- process-test-classes:对编译生成的测试类文件进行后处理。
- test:运行使用合适单元测试框架的测试。
- prepare-package:在实际打包之前进行任何必要的操作。
- package:将编译后的代码打包成可分发的格式,如 JAR、WAR 等。
- pre-integration-test:为执行集成测试进行必要的设置。
- integration-test:将代码部署到集成测试环境中,并运行集成测试。
- post-integration-test:完成集成测试后进行的操作,例如清理集成测试环境。
- verify:运行任何检查,验证项目包的有效性和质量。
- install:将包安装到本地 Maven 仓库,使其他项目可以作为依赖使用。
- deploy:将最终的包复制到远程 Maven 仓库,以共享给其他开发者和项目。
3. 站点生命周期(Site Lifecycle)
站点生命周期负责创建和发布项目站点文档。
- pre-site:在生成项目站点之前执行的任务。
- site:生成项目的站点文档。
- post-site:在生成项目站点之后执行的任务,并为部署做准备。
- site-deploy:将生成的站点文档部署到特定的服务器上。
Maven 生命周期阶段的调用顺序
在调用 Maven 命令时,如果你指定了某个阶段,Maven 会执行从生命周期开始到该阶段为止的所有阶段。例如,如果你运行 mvn install
,Maven 会依次执行 validate
、initialize
、generate-sources
、process-sources
、generate-resources
、process-resources
、compile
、process-classes
、generate-test-sources
、process-test-sources
、generate-test-resources
、process-test-resources
、test-compile
、process-test-classes
、test
、prepare-package
、package
、pre-integration-test
、integration-test
、post-integration-test
、verify
和 install
阶段。
常用的 Maven 命令
mvn clean
:执行清理生命周期,移除上一次构建生成的所有文件。mvn compile
:编译项目的源代码。mvn test
:运行测试。mvn package
:将编译后的代码打包成可分发的格式。mvn install
:将包安装到本地 Maven 仓库。mvn deploy
:将包部署到远程 Maven 仓库。
maven热部署插件各种命令作用
Maven 热部署插件(如 Tomcat Maven Plugin)提供了多种命令,用于管理和部署应用到 Tomcat 服务器。下面是一些常用命令及其作用的解释:
-
tomcat7:deploy
:- 作用:将 WAR 文件部署到运行中的 Tomcat 服务器。
- 使用阶段:
deploy
阶段 - 示例:
mvn tomcat7:deploy
- 说明:在执行这个命令之前,通常需要先执行
mvn package
来打包应用。
-
tomcat7:redeploy
:- 作用:重新部署应用,先卸载旧的 WAR 文件,然后部署新的。
- 使用阶段:
deploy
阶段 - 示例:
mvn tomcat7:redeploy
- 说明:适用于已经部署的应用需要更新的情况,不需要重启 Tomcat。
-
tomcat7:undeploy
:- 作用:从 Tomcat 服务器卸载应用。
- 使用阶段:
post-integration-test
阶段 - 示例:
mvn tomcat7:undeploy
- 说明:从服务器上删除应用 WAR 文件及其相关资源。
-
tomcat7:run
:- 作用:在嵌入式 Tomcat 中运行应用,用于开发和测试。
- 使用阶段:
integration-test
阶段 - 示例:
mvn tomcat7:run
- 说明:在没有安装独立的 Tomcat 服务器的情况下,可以在本地快速启动应用。
-
tomcat7:start
:- 作用:启动 Tomcat 服务器,但不部署任何应用。
- 使用阶段:
pre-integration-test
阶段 - 示例:
mvn tomcat7:start
- 说明:适用于需要手动部署或调试的情况。
-
tomcat7:stop
:- 作用:停止 Tomcat 服务器。
- 使用阶段:
post-integration-test
阶段 - 示例:
mvn tomcat7:stop
- 说明:停止运行中的 Tomcat 实例。
-
tomcat7:exploded
:- 作用:部署解压后的 WAR 文件到 Tomcat 服务器。
- 使用阶段:
deploy
阶段 - 示例:
mvn tomcat7:exploded
- 说明:适用于需要查看和修改部署文件的情况。