Maven自动化部署方案 一、 摘要 Maven是一个项目构建和管理的工具,使用maven的自动部署功能可以很方便的将maven工程自动部署到远程tomcat服务器,而且tomcat并不需要进行重新启动。由于项目在不同环境(开发、测试、生产)下的配置文件不同,因此进行远程部署前,项目打包也需要使用不同的策略,而maven可通过自定义profiles,实现根据命令参数来执行相应的打包策略。 方案的实现模型:项目源代码在eclipse中创建,通过maven插件对其进行编译、测试、打包(按策略)、部署到远程tomcat,远程tomcat对maven上传过来的war进行自动解压并部署启动。 二、 环境 Eclipse Apache Maven 3.3.3 Tomcat7 三、 配置 1、Tomcat Tomcat提供了manager的功能,启动tomcat后,通过相应用户名和密码进行登录,能够对容器内的应用进行启动、停止、部署以及卸载。而这种功能的开启,需要在tomcat的配置文件中进行配置。 在tomcat根路径\conf\tomcat-users.xml文件中加入以下配置,然后启动tomcat。 <role rolename="manager-script"/> <role rolename="manager-gui"/> <user username="admin" password="admin" roles="manager-script,manager-gui"/> 说明:manager-script角色是实现上述功能的主要角色; manager-gui角色是允许用户通过远程访问manager的管理页面。 2、Maven Maven通过其tomcat7-maven-plugin插件登录远程tomcat,并上传工程war包的,因此需要为其配置tomcat的manager账户的用户名和密码,这种配置有两种方式,一种是在项目的POM文件中配置,这种配置方式只对当前maven工程有效,且暴漏了tomcat的用户名密码;另一种方式是,在本机maven的setting文件中配置,对本机所有maven工程有效,且不对外暴漏tomcat用户名和密码: 在sertting文件中servers标签下加入以下配置。 <server> <id>tomcat</id> <username>admin</username> <password>admin</password> </server> 说明:用户名和密码是tomcat中配置的用户名和密码; Id是将来用于pom文件中进行引用指定。 3、POM Pom文件中,配置profile和resource实现不同的打包策略,配置plugin引入插件来实现远程部署。 在pom文件的project标签下加入以下配置。 <profiles> <profile> <!-- 本地开发环境 --> <id>development</id> <properties> <profiles.active>development</profiles.active> <deploy.url>http://localhost:8080/manager/text</deploy.url> </properties> <activation> <activeByDefault>true</activeByDefault> </activation> </profile> <profile> <!-- 测试环境 --> <id>test</id> <properties> <profiles.active>test</profiles.active> <deploy.url>http://ip:port/manager/text</deploy.url> </properties> </profile> <profile> <!-- 生产环境 --> <id>production</id> <properties> <profiles.active>production</profiles.active> <deploy.url>http:// ip:port /manager/text</deploy.url> </properties> </profile> </profiles> 说明:id是定义打包时候传入的参数; Properties中定义了两个内置变量,不同的id对应不同的变量值,用于替代打包插件的对应参数。 在pom文件的build标签下加入以下配置。 <resources> <resource> <directory>src/main/resources</directory> <!-- 资源根目录排除各环境的配置,使用单独的资源目录来指定 --> <excludes> <exclude>test/*</exclude> <exclude>production/*</exclude> <exclude>development/*</exclude> </excludes> </resource> <resource> <directory>src/main/resources/${profiles.active}</directory> </resource> </resources> 说明: 第一个directory 结合excludes是排除resources下对应配置文件,不对其打包。 第二个directory表示指定目录中配置文件进行打包。 两者结合即可实现resources文件下放置的公共配置文件进行打包处理,对应的打包策略的文件夹内的配置文件进行打包处理。 在pom文件的plugins标签下加入以下配置。 <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.0-SNAPSHOT</version> <configuration> <url>${deploy.url}</url> <server>tomcat</server> <path>/XX</path> <update>true</update> </configuration> </plugin> 说明:url是部署至tomcat的地址,用变量接受,以实现策略发布; Server是setting文件中的对应tomcat的server标签值; Path是项目发布后的上下文; Update为true表示若远程tomcat已有相同上下文的项目时,对其进行跟新。 4、src/main/resources 在所有配置文成后,相应的配置文件也应该依照配置进行相应的结构创建,即在src/main/resources目录下创建三个对应的文件夹,存放相应策略(环境)下的配置文件,在resources文件夹内可以存放公共的配置文件。 注意:不同环境内的配置文件不能和公共配置文件重名,否则将不起作用。 四、 部署 maven部署命令: 默认开发环境:clean package tomcat7:deploy ; 测试环境:clean package tomcat7:deploy –Ptest ; 生产环境:clean package tomcat7:deploy –Pproduction ; 五、 备注 1、tomcat指定远程ip Tomcat的manager功能也提供了ip过滤,即指定ip的计算机才能使用manager功能实现自动部署。该配置在tomcat根\webapps\manager\META-INF\context.xml中: <!-- <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" /> --> 说明:默认是注释掉的,即允许任何ip使用其manager功能 2、tomcat自动部署的路径 Tomcat的虚拟主机的appBase路径,即为manager自动部署的路径。 <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> </Host> 说明:倘若使用了虚拟路径<Context docBase="XXX" path="/XXX"reloadable="false" />,manager是不能够将项目部署到该虚拟路径的。 (责任编辑:IT) |