背景:
最近刚接触Maven,对Maven才了解些皮毛就被老大安排协助编译XWIKI源码,期间急需一款好的Web容器,并能有很好的Maven插件支持及debug功能,可能jetty[注解1]是很多人的首选,配置也很简单,但是jetty对断点的跟踪确实让人头疼(也可能是在下技术太烂),所以只能转投Tomcat,在网上找了一大堆技术blog,但是都未能完全解决我的问题,有的我个人觉得都有点误导别人,所以特别写下这篇文章,以帮助其他像我一样菜的人。在此也希望国内的技术人能多一分用心,技术上容不得以讹传讹。
步骤:
一、在Eclipse中安装Tomcat插件。
说明:Eclipse原生对Tomcat的支持比较弱,配合Maven插件使用也比较痛苦,所以建议安装Tomcat插件。
1. 进入Eclipse Marketplace。
2. 搜索Tomcat关键字,在搜索结果中选择UqbarTomcat XT Eclipse Plug-in进行安装。
注:Eclipse工具栏中出现上图中的三个小图标表示插件安装成功。
3.指定Tomcat服务器。
二、Tomcat管理角色及War上传大小限制的配置。
说明:Tomcat角色的配置主要是让用户能够通过页面及http请求管理和部署web运用。Tomcat角色说明及配置方法可以在启动Tomcat之后访问管理页面(Tomcat7:http://127.0.0.1:8080/manager/html),然后选择取消登陆,接下来打开的页面有详细说明,见下图:
1. 角色配置文件(%TOMCAT_HOME%/conf/ tomcat-users.xml),我的配置见下图:
XML代码片段:
<rolerolename="manager-script"/>
<rolerolename="manager-gui"/>
<rolerolename="manager-jmx"/>
<rolerolename="manager-status"/>
<user username="admin"password="admin" roles="manager-gui,manager-script,manager-jmx,manager-status"/>
注:为什么要配置这些角色请看%TOMCAT_HOME%/webapps/manager/WEB-INF/web.xml文件说明,如下图所示:
2. 设置Tomcat App Manager中War包上传大小限制(%TOMCAT_HOME%/webapps/manager/WEB-INF/web.xml),我的War大小200M左右,初始配置为50M,所以我的配置见下图:
XML代码片段如下:
<multipart-config>
<!-- 500MB max -->
<max-file-size>524288000</max-file-size>
<max-request-size>524288000</max-request-size>
<file-size-threshold>0</file-size-threshold>
</multipart-config>
三、设置Tomcat Maven 插件的中央仓库(主要是设置settings.xml文件,这个不会的上网搜索)。
1.配置Tomcat Maven插件的依赖模块的仓库,以下是xml代码片段。
<settings>
<profiles>
<profile>
<repositories>
<repository>
<id>apache.rep1</id>
<url>http://repository.apache.org/content/groups/snapshots-group/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
</profile>
</profiles>
</settings>
2. 配置Tomcat Maven插件的仓库,以下是xml代码片段。
<settings>
<profiles>
<profile>
<pluginRepositories>
<pluginRepository>
<id>apache.req2</id>
<url>http://repository.apache.org/content/groups/snapshots-group/</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</settings>
</profiles>
</profile>
四、在POM中配置TomcatMaven插件,以下是xml代码片段。
<project>
</build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.3-SNAPSHOT</version>
<configuration>
<url>http://localhost:8080/manager/text</url>
<username>admin</username>
<password>admin</password>
<path>/xwiki</path><!--web app path-->
<contextReloadable>true</contextReloadable>
</configuration>
</plugin>
</plugins>
</build>
</project>
注:configuration中的username和password也可以在settings.xml中配置,这样的话就直接通过id引用(settings.xml中配置server,在pom中配置就不用配置username和password而是直接配置id)。
<!--settings.xml-->
<server>
<id>tomcat</id>
<username>admin</username>
<password>admin</password>
</server>
<!--settings.xml-->
<!--pom.xml-->
<configuration>
<url>http://localhost:8080/manager/text</url>
<id>tomcat</id>
<path>/xwiki</path>
<contextReloadable>true</contextReloadable>
</configuration>
<!--pom.xml-->
涉及的软件版本:
Tomcat7:7.0.22
Maven: 3.2.3
Eclipe:4.4
Tomcat Maven插件配置失败主要问题:
一、War包太大,Tomcat 插件部署项目不成功。
解决方法:配置War上传大小限制。
二、所有配置都按照以上提及的步骤设置正确,但是TomcatMaven插件依然不能成功部署项目(这也是我花费最多时间才解决的问题)。
原因:Tomcat Maven不支持Tomcat版本(本人喜欢用新版本,Tomcat7使用的是7.0.55版本)。
解决方法:使用Tomcat Maven插件对应的Tomcat版本。
注:Tomcat Maven版本对应怎样的Tomcat版本本人也未查到具体的资料,只能通过tomcat-util版本去推断(我不知道这种方法是否正确,但我从表象上验证是可行的,望各位同行注意一点),例如:7.0.54的tomcat-util版本,我觉得应该支持Tomcat7.0.54及以下版本。Tomcat-util是Tomcat Maven插件的一个依赖模块,在下载Tomcat Maven插件时会一并下载,各位可以到Maven本地仓库查找,路径为% LOCALREPO % /org/apache/tomcat/omcat-util,以下是我已下载的tomcat-util版本。
注:使用Maven插件部署项目时,一定要先启动Tomcat。Tomcat7 Maven插件使用命令请查看参考链接二(第一次写博文,有不好的地方,望各位指点,谢谢!)
参考链接:
一、http://blog.csdn.net/lanhaimylover/article/details/7794476
二、http://tomcat.apache.org/maven-plugin.html
注解1:很多人发现按照网上大多数博客说的jetty Maven插件配置方式不能使用形如mvn jetty:run的命令格式运行,这是因为这些文章要么是太老旧,要么是因为作者急于转发,而未进行验证,现在新版本的jetty maven插件已经迁移到org.eclipse.jetty中管理,已经不在org.mortbay.jetty下管理,这样就造成Maven不能通过jetty识别,只能通过ga/gav指定,形如:org.mortbay.jetty:maven-jetty-plugin:run或者org.eclipse.jetty:jetty-maven-plugin:run