我在平时工作中部署Web项目到测试服务器上的Tomcat时用的是Hudson。Hudson本身已经跟SVN、Git、Maven集成并且支持添加各种插件。但如果使用Hudson,我需要配置两个任务:一个任务负责打包项目成WAR,另外一个任务负责部署打包好的WAR包到目标服务器的Tomcat上。虽然任务只需要配置一次,但每次修改代码提交后,都得切换到浏览器点Hudson构建任务页面上的Build Now按钮,然后还得跳转到另一个页面观察是否有报错。烦不胜烦,偶然发现Tomcat
Maven插件支持直接部署项目到Tomcat中,尝试一番后终于搞定,总结于此。
网上关于这个主题的文章也不少,过程也大同小异,但本文最主要的是想记录下我在此过程中踩过的坑和关于这种部署方案的建议。
1、准备工作
下载安装并配置好Tomcat和Maven。
准备好一个Maven Web项目。
2、Maven部署Web项目到Tomcat的配置
2.1、配置Tomcat角色
Maven自动部署实际上调的是Tomcat安装目录下的manager功能。而为了能正常访问http://localhost:8080/manager页面,我们需要修改$TOMCAT_HOME/conf目录下的tomcat-users.xml:
1
2
3
4
5
6
7
8
9
|
< tomcat-users >
< role rolename = "tomcat" />
< role rolename = "manager" />
< role rolename = "manager-gui" />
< role rolename = "manager-script" />
< role rolename = "admin-gui" />
< user username = "tomcat" password = "tomcat" roles="tomcat,manager,
manager-gui,manager-script,admin-gui"/>
</ tomcat-users >
|
2.2、修改pom.xml增加Tomcat Maven插件
我使用的Tomcat7,pom.xml中增加如下配置:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
< properties >
< project.build.sourceEncoding >UTF-8</ project.build.sourceEncoding >
< spring.version >3.2.2.RELEASE</ spring.version >
< finalName >web-loab</ finalName >
</ properties >
< build >
< plugins >
< plugin >
< groupId >org.apache.tomcat.maven</ groupId >
< artifactId >tomcat7-maven-plugin</ artifactId >
< configuration >
< url >http://localhost:8080/manager/text</ url >
< server >tomcat</ server >
< username >tomcat</ username >
< password >tomcat</ password >
< path >/${finalName}</ path >
</ configuration >
</ plugin >
</ plugins >
</ build >
|
上面username、password来自tomcat-users.xml。server是Tomcat服务器名称。path是访问应用的路径。url指定Tomcat管理页路径。
2.3、修改Maven的settings.xml
在$USER_HOME/.m2目录下找到settings.xml,添加server节点:
1
2
3
4
5
6
7
|
< servers >
< server >
< id >tomcat</ id >
< username >tomcat</ username >
< password >tomcat</ password >
</ server >
</ servers >
|
上面的username、password依然与tomcat-users.xml中相同,id与2.2中的server相同
2.4、部署项目到Tomcat
先确保Tomcat服务器已经启动,然后cd到项目根目录,运行下面的命令:
部署成功,如下:
然后我们就能在Tomcat安装目录的webapps目录下找到新部署的WAR包。
初次部署用的是tomcat7:deploy命令,重新部署可以用tomcat7:redeploy命令(推荐统一用这个),Tomcat Maven插件支持的命令包括:run、shutdown、run-war-only、exec-war、standalone-war-only、deploy、standalone-war、undeploy、run-war、redeploy等。
3、踩过的坑
光看上面的过程,似乎非常顺畅,但世上的事总是不会那么顺利的。下面列举几个我踩过的坑。
3.1、Windows系统下,redeploy过程无法删除旧项目的目录
报错信息在$TOMCAT_HOME/logs下的catalina日志文件中,如下:
1
2
3
|
信息:Undeployingcontext[/web-loab]
十月11,20143:52:26下午org.apache.catalina.startup.ExpandWardeleteDir
严重:[D:\tomcat\apache-tomcat-7.0.56\webapps\web-loab\WEB-INF]couldnotbecompletelydeleted.Thepresenceoftheremainingfilesmaycauseproblems
|
大概是因为Tomcat还在使用这个目录,无法删除,必须修改$TOMCAT_HOME/conf/context.xml:
1
|
< Context antiJARLocking = "true" antiResourceLocking = "true" >
|
3.2、Servelt.class offending
这个问题应该不属于本文主题范畴了,但可能因为这个导致Web项目启动起来却无法访问,报错信息如下:
1
2
|
十月11,20143:46:29下午org.apache.catalina.loader.WebappClassLoadervalidateJarFile
信息:validateJarFile(D:\tomcat\apache-tomcat-7.0.56\webapps\web-loab\WEB-INF\lib\servlet-api-6.0.29.jar)-jarnotloaded.SeeServletSpec3.0,section10.7.2.Offendingclass:javax/servlet/Servlet.class
|
原因是webapps目录下的某个Web项目的WEB-INF/lib目录下有servlet-api.jar,删除之,并在pom.xml中指定servelt-api.jar的scope为provided:
1
2
3
4
5
6
|
< dependency >
< groupId >org.apache.tomcat</ groupId >
< artifactId >servlet-api</ artifactId >
< version >6.0.29</ version >
< scope >provided</ scope >
</ dependency >
|
3.3、版本问题
确保Web项目的Java Build Path使用的JDK版本、Java Compiler的编译JDK版本以及Project Facets里的Java版本一致。
如果用的Tomcat6,则pom.xml中配置tomcat6-maven-plugin,如果用的tomcat7则用tomcat7-maven-plugin。或者默认用tomcat-maven-plugin。
4、有关使用Tomcat Maven插件部署项目的一些建议
这种方案能够实现持续快捷部署。但它有一些局限性:
因此初步建议只在开发环境使用这种部署方式,并且结合SVN、Git等版本控制软件做两个内部约定:
完!
分享到:
相关推荐
使用maven插件,可以把java web项目远程部署到tomcat容器,免去了手工拷贝的重复造轮子。 maven
Maven插件 Maven创建Java项目 使用Maven构建和测试Java项目 Maven外部依赖 Maven项目文档 Maven项目模板 Maven快照 Maven构建自动化 Maven依赖管理 Maven自动化部署 Maven Web应用 Eclispe IDE集成Maven NetBeans ...
idea中利用maven创建web项目, 并通过tomcat进行部署,运行项目
IDEA2020导入非maven项目并部署tomcat的方法在idea中将创建的java web项目部署到Tomcat中的过程图文详解idea打包成war包部署到tomcat及访问路径问题(图文详解)Idea配置maven-tomcat-plugin插件实现项目部署IDEA导入...
将Service层以下的代码放到一个新创建的java项目中,在部署的时候将Service(java项目)打成一个jar包,分别放到两个web服务中;编译的时候让web项目依赖与Service(java项目)_source folder;配置麻烦,项目与项目之间的...
重构的应用程序部署器,具有可选的独立部署器,允许在Web应用程序投入生产之前进行验证和编译 使用JMX和管理器Web应用程序完成服务器监视 可扩展性和可靠性增强 改进了Taglibs的处理,包括高级池和标签插件 改进的...
Java 项目开发过程中,构建指的是使用 『原材料生产产品』 的过程。 原材料 Java 源代码 基于 HTML 的 Thymeleaf 文件 图片 配置文件 …… 产品 一个可以在服务器上运行的项目 构建过程包含的主要的环节: 清理:...
jenkins自动化部署全套方案:包括tomcat、jdk、maven、git; 而且还包括jenkins所需插件(plugins.zip); 首次安装选择推荐插件时出现“: No such plugin: cloudbees-folder” 解决方案 1、下载附件资源:cloudbees-...
java-tomcat-maven-example 这是使用Maven和webapp-runner为Tomcat构建的示例可立即部署的Java Web应用程序。本地运行##添加了一些东西(需要安装Maven和Java) mvn packagejava -jar target/dependency/webapp-...
Jenkins使用及插件开发介绍介绍Jenkins是一个广泛用于[持续构建]()的可视化web工具,就是各种项目的的“自动化”编译、打包、分发部署,将以前编译、打包、上传、部署到Tomcat中的过程交由Jenkins,Jenkins通过给定...
这是使用Maven和webapp-runner为Tomcat构建的示例可立即部署的Java Web应用程序。 本地运行 (需要安装Maven和Java) mvn package java -jar target/dependency/webapp-runner.jar target/*.war 该应用程序将在...
fast-jfinaljfinal项目以embed-tomcat或undertow的方式运行,无须打war包,无续部署tomcat用appassembler-maven-plugin打包,然后运行bin目录中的脚本即可。具体参见demo项目:1.pom.xml引入<dependency> <groupId>org....
如何部署web应用 webApp提供者 如何部署第三方产品 部署展开形式的web应用 使用Jetty进行开发 如何使用Jetty进行开发 如何编写Jetty中的Handlers 使用构建工具 如何在Maven中使用Jetty 如何在Ant中使用Jetty Maven和...
Maven插件使用eclipse mars自带maven插件。只需要统一开发环境。 3.3. 依赖管理 传统工程结构: Maven管理的工程结构: 不使用maven:工程部署时需要手动复制jar...
项目封装了一系列常用方法、部署运行简单,便于个人或企业进行高效开发。 ## 一、项目开发环境&工具(Environment&Tools) * MacOS Sierra / Windows 7 * MySql 5.7 * JDK 1.8 * CentOS 7 * IntelliJ IDEA 2017.2...
时间追踪器 创建时间:06/18/2014 合作者: 概括 使用现有的 github 存储库逐项列出按问题、里程碑或与存储库的一般关联向客户... 使用 Tomcat 的基于 Web 的界面部署.war文件。 命令行上的 Mac OSX 用户: 运行br
熟练掌握java基础知识,具有良好的编码习惯;... 熟练使用SVN、Maven、PowerDesigner、Eclipse、idea等项目开发及管理工具; 熟练使用WebService技术; 了解阿里分布式开源框架dubbo,有一定的使用经验;
java-tomcat-maven-example 这是使用Maven和webapp-runner为Tomcat构建的示例可立即部署的Java Web应用程序。本地运行(需要安装Maven和Java) mvn packagejava -jar target/dependency/webapp-runner.jar target/*....
Spring Boot作为Spring家族中的明星成员,极大地简化了基于...通过Web界面或IDE插件,你可以选择所需的依赖,自动生成项目骨架代码,省去了手动配置Maven或Gradle构建文件的繁琐步骤。 ### 视频课程与在线教程 - **Yo