Eclipse中的Maven项目一键部署到Tomcat服务器 - 支持多环境部署

Eclipse中的Maven项目一键部署到Tomcat服务器 - 支持多环境部署

场景说明:

      Java Maven Web项目编译、打包后,需要一键部署到研发或者测试服务器上,不用人工手动传包或者手动操作。利用Tomcat的热部署功能实现。

       环境及工具:

      Windows 7 64bit         Tomcat7       JDK1.7_0_55       Eclipse Kepler Service Release 2      Maven 3.0.4      Spring4.0      JUnit4.9      logback1.1.3

         异常情况:

          在项目搭建时,可能出现各种异常情况,比较常见的问题我记录下来,仅供参考。请参见最后章节:9 异常问题

        项目下载:

           链接:http://pan.baidu.com/s/1gdzxWRp 密码:2z0d


项目说明:

1. 创建Java Web Maven项目

在Eclipse新建一个Maven project

Eclipse中的Maven项目一键部署到Tomcat服务器 - 支持多环境部署_第1张图片

Eclipse中的Maven项目一键部署到Tomcat服务器 - 支持多环境部署_第2张图片

选择maven-archetype-webapp,创建Web项目

Eclipse中的Maven项目一键部署到Tomcat服务器 - 支持多环境部署_第3张图片

输入Group Id等信息,点击FINISH完成项目创建。

Eclipse中的Maven项目一键部署到Tomcat服务器 - 支持多环境部署_第4张图片

项目创建完成后,右键点击项目,选择配置项目,在Java Build Path选项中,修改默认的输出目录dev/target/classes

Eclipse中的Maven项目一键部署到Tomcat服务器 - 支持多环境部署_第5张图片

Eclipse中的Maven项目一键部署到Tomcat服务器 - 支持多环境部署_第6张图片

Eclipse中的Maven项目一键部署到Tomcat服务器 - 支持多环境部署_第7张图片


另外在Web Deployment Assembly项目部署选项中,删除不需要的项

Eclipse中的Maven项目一键部署到Tomcat服务器 - 支持多环境部署_第8张图片


2. 多环境配置文件和目录

在src/main/resources目录创建三个目录dev、pro、test

Eclipse中的Maven项目一键部署到Tomcat服务器 - 支持多环境部署_第9张图片Eclipse中的Maven项目一键部署到Tomcat服务器 - 支持多环境部署_第10张图片Eclipse中的Maven项目一键部署到Tomcat服务器 - 支持多环境部署_第11张图片

conf-sys.properties  测试环境=test,生产环境=pro ,就这个文件三个环境有不一样,其他配置文件三个环境的都一样,这是为了区分编译打包后每个环境配置不一样

# properties
propertiesName=dev

logback.xml




	
	
	
	
		
			%d{yyyy-MM-dd HH:mm:ss} [%level] %class{5} - %msg%n
		
	

	
	
	
		${log.base}/dev.log
		
			${log.base}/dev-%d{yyyy-MM-dd}.log
			15
		
		
		
			%date{yyyy-MM-dd HH:mm:ss} [%logger{5}]-[%le] - %m%n
		
	

	
		
	
 

spring-config.xml




	

	
	
		
	


spring-mvc.xml


	
	
	

	

	
	
		
		
	

	
	

	
	

	
    
        
        
            /WEB-INF/pages/
        
        
        
            .jsp
        
    
    


创建一个Spring MVC的控制器

package com.hs.maven.controller;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

/**
 * @author hushuang
 *
 */
@Controller
public class DevController {
	private static Logger log = LoggerFactory.getLogger(DevController.class);
	/**	配置文件名称,早conf-sys.properties文件中定义,区分不同打包指令后各环境的配置文件内容	*/
	@Value("${propertiesName}")
	private String propertiesName;
	/**
	 * 登录
	 * @return String
	 */
	@RequestMapping("/login")
	public String  login(Model model) {
		log.info(propertiesName + "Login!");
		model.addAttribute("user", propertiesName);
		return "index";
	}
}

3. web.xml配置文件



	dev
	
	
	
		contextConfigLocation
		
            classpath:spring-config.xml
        
	
	
		org.springframework.web.context.ContextLoaderListener
	
	
		org.springframework.web.context.request.RequestContextListener
	
	
	
	
		Set Character Encoding
		org.springframework.web.filter.CharacterEncodingFilter
		true
		
			encoding
			UTF-8
		
		
			forceEncoding
			true
		
	
	
		Set Character Encoding
		/*
	

	
	
		spring
		org.springframework.web.servlet.DispatcherServlet
		
			contextConfigLocation
			classpath:spring-mvc.xml
		
		1
		true
	
	
		spring
		/
	





4. 测试页面

login.html放到static目录下是为了避开控制器的拦截

Eclipse中的Maven项目一键部署到Tomcat服务器 - 支持多环境部署_第12张图片

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"  pageEncoding="UTF-8"%>




Insert title here


${user}登录成功!


login.html





Insert title here


登录



5. Maven pom.xml配置文件


	4.0.0
	com.hs
	dev
	war
	0.0.1-SNAPSHOT
	dev Maven Webapp
	http://maven.apache.org
	
		
		
			junit
			junit
			4.9
			test
		
		
		
			org.slf4j
			slf4j-api
			1.6.2
		
		
			org.slf4j
			jcl-over-slf4j
			1.6.2
		
		
			ch.qos.logback
			logback-core
			1.1.3
		
		
			ch.qos.logback
			logback-classic
			1.1.3
		

		
		
			org.springframework
			spring-core
			4.0.0.RELEASE
		
		
			org.springframework
			spring-context-support
			4.0.0.RELEASE
		

		
			org.springframework
			spring-jdbc
			4.0.0.RELEASE
		

		
			org.springframework
			spring-tx
			4.0.0.RELEASE
		

		
			org.springframework
			spring-webmvc
			4.0.0.RELEASE
		

		
		
			javax.servlet
			javax.servlet-api
			3.0.1
			provided
		
		
		
			javax.servlet
			jstl
			1.2
		
	

	
	
		
			development
			
				dev
				http://192.168.0.100:8080/manager/text
			
			
				true
			
		
		
			test
			
				test
				http://192.168.0.200:8080/manager/text
			
		
		
			
			production
			
				pro
				http://www.app.cn:8080/manager/text
			
		
	

	
		dev
		
		
			
			
			
				src/main/java
				
					**/*.properties
					**/*.xml
				
				
					**/generatorConfig.xml
				
				true
			

			
			
				src/main/resources
				
					test/*
					pro/*
					dev/*
				
			

			
			
				src/main/resources/${profiles.active}
			
		

		
			
			
				org.apache.maven.plugins
				maven-compiler-plugin
				3.2
				
					1.7
					1.7
				
			
			
			
			
				org.apache.maven.plugins
				maven-war-plugin
				2.4
				
			

			
			
				org.codehaus.cargo
				cargo-maven2-plugin
				1.1.3
				
					true
					
						tomcat7x
						remote
					
					
						runtime
						
							${deploy.url}
                                                        
  tomcat-usernametomcat-password

 
  

6. Maven pom.xml文件【Run As】自定义指令运行配置

一般运行maven都是右键点击pom.xml文件,选择运行一个已经配置好的maven指令

Eclipse中的Maven项目一键部署到Tomcat服务器 - 支持多环境部署_第13张图片

但是在使用中,这种功能和效率都达不到我们的要求,这时需要配置自定义指令配置,一般会配置5条自定义指令:

Eclipse中的Maven项目一键部署到Tomcat服务器 - 支持多环境部署_第14张图片

说明:

Name: 显示名称

Base directory:  项目绝对地址目录

Goals: maven执行指令 指令中的-D表示参数,如果是研发环境就是dev,生产是pro

Skip Tests  表示选中跳过测试

1. 研发环境打包指令

Name: dev-dev-package

Base directory:  E:/workspace/dev

Goals: clean package -Ddev

Skip Tests

2. 研发环境部署指令

Name: dev-dev-deploy

Base directory:  E:/workspace/dev

Goals: cargo:redeploy -Ddev

Skip Tests

3. 测试环境打包指令

Name: dev-test-package

Base directory:  E:/workspace/dev

Goals: clean package -Dtest

Skip Tests

4. 测试环境部署指令

Name: dev-test-deploy

Base directory:  E:/workspace/dev

Goals: cargo:redeploy -Dtest

Skip Tests

5. 生产环境打包指令

Name: dev-pro-deploy

Base directory:  E:/workspace/dev

Goals: cargo:redeploy -Dpro

Skip Tests

7. Tomcat自动部署支持

需要在Tomcat配置目录conf下的tomcat-users.xml配置tomcat用户的角色和权限,下面的配置为我们tomcat-username这个用户配置了管理权限,可以向tomcat部署应用





    
    
    
    
    
    
配置说明:

manager-gui
允许访问html接口(即URL路径为/manager/html/*)
manager-script
允许访问纯文本接口(即URL路径为/manager/text/*)
manager-jmx
允许访问JMX代理接口(即URL路径为/manager/jmxproxy/*)
manager-status
允许访问Tomcat只读状态页面(即URL路径为/manager/status/*)

从Tomcat Manager内部配置文件中可以得知,manager-gui、manager-script、manager-jmx均具备manager-status的权限,也就是说,manager-gui、manager-script、manager-jmx三种角色权限无需再额外添加manager-status权限,即可直接访问路径"/manager/status/*"。


8. 运行验证

Maven自定义指令和Tomcat的权限配置完成后,就可以使用指令打包和部署了,右键点击pom.xml文件,选择【Run As】 第一个【Maven build】就会弹出一个指令选择框,选中要执行的指令,在Console窗口就会看到执行结果,如果是 BUILD SUCCESS就说明成功了。

Eclipse中的Maven项目一键部署到Tomcat服务器 - 支持多环境部署_第15张图片

Eclipse中的Maven项目一键部署到Tomcat服务器 - 支持多环境部署_第16张图片

Eclipse中的Maven项目一键部署到Tomcat服务器 - 支持多环境部署_第17张图片


如果是项目部署,也是一样,注意用户名密码和pom.xml的一致,执行部署指令,就能将项目一键部署到服务器。然后在浏览器中输入部署服务器的地址,就能看到登录信息,登录完成后就可以看到是那个用户登录的。如果是测试用户打包,部署后就会是test登录成功。

Eclipse中的Maven项目一键部署到Tomcat服务器 - 支持多环境部署_第18张图片   Eclipse中的Maven项目一键部署到Tomcat服务器 - 支持多环境部署_第19张图片


总结:通过maven的部署插件和tomcat的热部署功能,可以方便快捷的将代码部署到研发和测试环境,并且减轻研发人员部署验证的工作,提高工作效率。


9 异常问题

如果你准备按照我的demo动手做一次,你可能会遇到一些问题,下面是我走过的坑,如果遇到,可以参考,如果你遇到的问题跟我的不一样,不要慌,静下心,对问题一点点的抽丝剥茧,总能解决,半个小时解决不了,问问身边的同事,然后百度、google,实在解决不来,静下心来慢慢排查,问题肯定能解决。

(1)Cannot change version of project facet Dynamic Web Module to 3.0.

项目的web版本异常,这个是出现比较多的问题,修改项目.settings目录下org.eclipse.wst.common.project.facet.core.xml文件,将改为,然后右键点击项目》Maven》Update Project就可以了。

Eclipse中的Maven项目一键部署到Tomcat服务器 - 支持多环境部署_第20张图片


(2)java.lang.NullPointerException pages.index_jsp._jspInit

项目中jsp-api.jar包冲突,注释掉pom.xml的配置。我已经注释掉了,如果你的环境提示缺少此jar包可以打开。


(3)项目部署后,日志是debug模式,启动只打印Tomcat日志,没有项目启动日志

        如下图中红色字体是tomcat日志,黑色字体是项目日志,如果没有黑色字体部分的日志

Eclipse中的Maven项目一键部署到Tomcat服务器 - 支持多环境部署_第21张图片Eclipse中的Maven项目一键部署到Tomcat服务器 - 支持多环境部署_第22张图片

此问题一般都是项目部署目录错误的配置导致的,在项目的部署选项中,一定要检查清楚

Eclipse中的Maven项目一键部署到Tomcat服务器 - 支持多环境部署_第23张图片

你可能感兴趣的:(Tomcat,Eclipse,Maven)