在前面的文章中我介绍了如何搭建Maven环境,如何搭建Tomcat环境,以及maven搭建和tomcat搭建过程中可能遇到的问题以及解决方法,那到底如何将一个maven项目发布到tomcat??maven项目发布到tomcat有两种方式:

1.生成war包,手动运行

2.自动发布到本地,远程Tomcat

这里我只介绍第一种方式,其实我首先尝试的是第二种方式,这样可以直接在Eclipse中就可以看到运行效果,但是尝试了很多次都没能成功,一直在maven build...这里构建失败,很可能是pom.xml配置有问题,这个以后有时间在研究。so~~~~

生成war包,手动运行

1.修改tomcat的配置文件,使其通过用户名密码可以被外界访问,安装目录下tomcat8.5\conf\tomcat-users.xml

maven 前端代码打成war包 maven项目打包部署到tomcat_tomcat

添加如下代码,设置用户名和密码为zhh:

<role rolename="admin-gui"/>
<role rolename="admin-script"/>
<role rolename="manager-gui"/>
<role rolename="manager" />
<role rolename="manager-script"/>
<role rolename="manager-jmx"/>
<role rolename="manager-status"/>
<user username="zhh" password="zhh" roles="manager-gui,manager,manager-script,manager-jmx,manager-status,admin-script,admin-gui"/>

配置完之后,启动tomcat8.5\bin下面的startup.bat之后,输入http://localhost:8080/manager ,tomcat的管理界面登录如下:

maven 前端代码打成war包 maven项目打包部署到tomcat_其他_02

2.修改下maven的配置文件maven\conf\settings.xml,给他配置上tomcat服务器

 <server>
      <id>tomcat8</id>
      <username>zhh</username>
      <password>zhh</password>
    </server>

3.添加tomcat7-maven-plugin,外部配置好了,现在配置下web工程中的pom,添加tomcat7-maven-plugin,我们使用的是tomcat8.5,一开始我一直查找tomcat8-maven-plugin的资源,后来也找到了,但是发现tomcat7-maven-plugin的2.2版本兼容tomcat8

<project xmlns="http://maven.apache.org/POM/4.0.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
						http://maven.apache.org/maven-v4_0_0.xsd">

  <modelVersion>4.0.0</modelVersion>
  <groupId>com.inspur</groupId>
  <artifactId>TestPlatform</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>TestPlatform Maven Webapp</name>
  <url>http://maven.apache.org</url>
  

  <dependencies>
    
    <dependency>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <version>3.0.0</version>
       
    </dependency>
  </dependencies>
  <build>
    <finalName>TestPlatform</finalName>
   
    <plugins>
     
       <plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-war-plugin</artifactId>			
				<configuration>
					<failOnMissingWebXml>false</failOnMissingWebXml>
				</configuration>
		</plugin>
		<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>			
				<version>3.2</version>
				<executions> 
                    <execution>
                        <id>default-compile</id> 
                        <phase>compile</phase> 
                        <goals> 
                            <goal>compile</goal> 
                        </goals> 
                    </execution> 
                </executions>
				<configuration>
					<source>1.8</source> 
					<target>1.8</target> 
					<encoding>UTF-8</encoding> 
				</configuration>
		</plugin>
		<plugin>
          <groupId>org.apache.tomcat.maven</groupId>
          <artifactId>tomcat7-maven-plugin</artifactId>
          <version>2.2</version>
          <configuration>
          	<url>http://localhost:8080/manager</url>
          	<username>zhh</username>
          	<password>zhh</password>
        	<update>true</update>
        	<!--  
        	<path>/${project.artifactId}</path>
        	-->
        	<path>/TestPlatform</path>
        	<uriEncoding>UTF-8</uriEncoding>
        	
        	<failOnMissingWebXml>false</failOnMissingWebXml>
          </configuration>
        </plugin>
	</plugins>
  </build>
</project>

4.在Eclipse中启动tomcat8.5,然后右击项目选中maven build...,然后配置goals:package,这样就会发布war包,运行之后会在控制台看到build success,证明maven项目发布成功。

maven 前端代码打成war包 maven项目打包部署到tomcat_apache_03

maven项目通过war包build success之后,去;浏览器访问发现404错误,这就很坑了,查阅了大量的资料后做一下总结:

1.检查项目名称以及访问路径,localhost:8080/项目名/manager或localhost:8080/项目名/login

2.web.xml中未加Spring的ContextLoaderListener监听器

解决方法:添加上如下代码

<!-- Spring监听 -->
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>

3.我们没有把war包放到tomcat的wabapps文件夹下,或者tomcat的wabapps文件夹下有多个war包

解决办法:此时需要我们去tomcat中的conf文件夹下,打开server.xml文件,然后在Host中修改,添加如下。这样就能防止wabapps文件下有多个war的时候服务器找不到文件而包404的错误了!

//docBase中的值是我们放到webapps文件夹下的war包的名
 <Context path="/" docBase="map-1.0-SNAPSHOT" debug="0" privileged="true" reloadable="true" />