一、Web项目结构
1、显式指定Web项目打包方式为war:
 

2、默认目录
根据“约定大于配置”的规则,Web项目的类及资源文件默认位置为src/main/java和src/main/resources,测试类和测试资源文件默认位置src/test/java和src/test/resources,Web资源目录位于src/main/webapp。
Maven项目结构没有War包中的lib目录,因为依赖都配置在POM中,Maven在用War方式打包的时候会根据POM配置从本地仓库复制相应的Jar文件。
 
3、war包名称——finalName元素配置
超级POM中设定的值为${project.artifactId}-${project.version}.war。
部署测试环境或最终产品环境,需要简洁的war包,需要配置finalName元素。
 
二、使用jetty-maven-plugin进行测试
1、原理
传统的Web测试方法要求编译、测试、打包及部署,这往往消耗很多时间,jetty-maven-plugin能够帮助我们节省时间,它能够周期性地检查项目内容,发现变更后自动更新到内置的Jetty Web容器中。即,帮我们省去了打包和部署的步骤。
2、配置
webappConfig元素下的contextPath表示项目部署后的上下文路径,上述配置/test表示用户可以通过http://hostname:port/test/访问该应用。
3、启动jetty-maven-plugin
默认情况下,只有org.apache.maven.plugins和org.codehaus.mojo两个gounpId下的插件才支持简化的命令行应用,即可运行mvn help:system。但mvn jetty:run就不行。
为了能够在命令行直接运行mvn jetty:run,用户需要配置settings.xml如下:
然后可运行:
  1. mvn jetty:run
 
或者指定端口:
  1. mvn jetty:run -Djetty.port=9999
停止测试运行,可Ctrl+C即可。
 
三、使用Cargo实现自动化部署
 
cargo-maven2-plugin和jetty-maven-plugin的功能看起来相似,但是目的不同。jetty-maven-plugin主要用来帮助日常的快速开发和测试,而cargo-maven2-plugin主要服务于自动化部署。
使用cargo,只需要一条简单的maven命令,就可以构建项目并部署到Web容器中,进行功能测试。
1、部署至本地Web容器
Cargo支持两种本地部署的方式,分别为standalone模式和existing模式。在stsndalone模式中,Cargo会从web容器的安装目录复制一份配置到用户指定的目录,然后在此基础上部署应用,每次重新构建的时候,这个目录都会被清空,所有配置被重新生成。
而在existing模式中,用户需要指定现有的web容器配置目录,然后Cargo会直接使用这些配置并将应用部署到其对应的位置。
如standalone模式的配置样例:
 
注意,与jetty一样,cargo-maven2-plugin的groupId是org.codehaus.cargo,不属于官方的两个Maven插件groupId,若使用简化的命令行则需要在settings.xml中pluginGroup元素中配置。
然后运行以下命令:
  1. mvn cargo:start
 
Cargo默认Web容器监听8080端口,也可以通过如下配置进行修改:
 
existing模式:
需要将上述Configuration子元素type的值为existing,而对于的home子元素表示现有的Web容器目录。运行后,可在Tomcat的webapps子目录看到被部署的Maven项目。
 
2、部署至远程Web容器
除了让Cargo直接管理本地Web容器外,还可以让Cargo部署应用至远程的正在运行的Web容器,前提是拥有该容器的相应权限。
tomcat中的用户权限可参看如下配置: 
  1. <role rolename="tomcat"/>
  2.   <role rolename="role1"/>
  3.   <role rolename="admin"/> 
  4.   <role rolename="manager-gui"/>
  5.   <role rolename="manager-script"/>
  6.   <role rolename="manager"/>  
  7.   <user username="admin" password="admin123" roles="admin,manager,manager-script,manager-gui"/>
 
然后运行命令如下:
  1. mvn cargo:redeploy
若容器已经部署了当前应用,Cargo会先将其卸载,然后重新部署。
 
注意,若要部署在远程机器,则需要注意以下几点:
1、远程机器防火墙要关闭
如红帽Linus系列使用如下命令:
  1. systemctl stop firewalld
 
2、远程机器的Tomcat要配置manager用户,且要有manager-script角色
参考上述tomcat中的用户权限配置,否则可能会有如下错误:
  1. [ERROR]Failed to execute goal org.codehaus.cargo:cargo-maven2-plugin:1.6.1:redeploy (default-cli) on project manage-admin:Executiondefault-cli of goal org.codehaus.cargo:cargo-maven2-plugin:1.6.1:redeploy faile
  2. d:Failed to redeploy [H:\workspace\QianduManage\manage-admin\target\manage-admin.war]:The username you provided is not allowed to use the text-based TomcatManager(error 403):Server returned HTTP response code
  3. :403for URL: http://localhost:8080/manager/text/list -> [Help 1]
  4. [ERROR]
  5. [ERROR]To see the full stack trace of the errors, re-run Maven with the -e switch.
  6. [ERROR]Re-run Mavenusing the -X switch to enable full debug logging.
  7. [ERROR]
  8. [ERROR]For more information about the errors and possible solutions, please read the following articles:
  9. [ERROR][Help1] http://cwiki.apache.org/confluence/display/MAVEN/PluginExecutionException
 
 
3、远程机器的Tomcat允许其他机器登录manager页面

需要在Tomcat目录的conf/Catalina/localhost/下新增文件:

manager.xml,内容如下:

  1. <Context privileged="true" antiResourceLocking="false"
    docBase="${catalina.home}/webapps/manager">
    <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="^.*$" />
    </Context>

 
4、plugin/configuration/configuration/properties需要配置cargo.hostname域名,否则默认localhost(无论cargo.tomcat.manager.url如何配置)
<plugin>
<groupId>org.codehaus.cargo</groupId>
<artifactId>cargo-maven2-plugin</artifactId>
<version>1.6.1</version>
<configuration>
<container>
<containerId>tomcat8x</containerId>
<type>remote</type>
</container>
<configuration>
<type>runtime</type>
<properties>
<cargo.hostname>10.110.2.161</cargo.hostname>
<cargo.remote.username>admin</cargo.remote.username>
<cargo.remote.password>admin123</cargo.remote.password>
<cargo.tomcat.manager.url>http://10.110.2.161:8080/manager</cargo.tomcat.manager.url>
</properties>
</configuration>
</configuration>
</plugin>
 
 
 
 
 
 
 

《Maven实战》笔记-8-构建部署Web项目的更多相关文章

  1. Ant + Jenkies +Tomcat 自动构建部署Web项目

    前言:博主资历尚浅,很多东西都还在刚起步学习的阶段,这几天开发任务比较轻,就在自己window系统下,模拟部署远程服务器,利用Jenkies + Ant + Tomcat 搭建了一个自动发布部署的环境 ...

  2. eclipse+maven远程(自动)部署web项目到tomcat

    [转自] http://blog.csdn.net/dhmpgt/article/details/11197995 eclipse集成maven后可以用maven命令把web项目自动部署到tomcat ...

  3. maven学习笔记(定制一个Web项目)

    创建web项目: mvn archetype:generate -DgroupId=cn.net.comsys.ut4.simpleweb -DartifactId=simple-web -Dpack ...

  4. Maven实现项目构建直接部署Web项目到Tomcat

    Maven实现项目构建直接部署Web项目到Tomcat配置如下: 1.Tomcat的用户及权限配置:在conf目录下,找到tomcat-users.xml,添加manager权限的用户. <ro ...

  5. [原]Jenkins(七)---jenkins项目编译测试发布由maven构建的web项目

    /** * lihaibo * 文章内容都是根据自己工作情况实践得出. * 版权声明:本博客欢迎转发,但请保留原作者信息! http://www.cnblogs.com/horizonli/p/533 ...

  6. 使用maven构建一个web项目

                          使用maven构建一个web项目     首先建立一个maven项目(关于环境配置上节有详细过程): 1)-->右键new,-->project ...

  7. 开发过程使用Tomcat Maven插件持续快捷部署Web项目

    我在平时工作中部署Web项目到测试服务器上的Tomcat时用的是Hudson.Hudson本身已经跟SVN.Git.Maven集成并且支持添加各种插件.但如果使用Hudson,我需要配置两个任务:一个 ...

  8. Eclipse的maven构建一个web项目,以构建SpringMVC项目为例

    http://www.cnblogs.com/javaTest/archive/2012/04/28/2589574.html springmvc demo实例教程源代码下载:http://zuida ...

  9. 在Tomcat中部署Web项目的操作方法,maven项目在Tomcat里登录首页报404

     maven项目在Tomcat里登录首页报404, 解决:编辑conf/server.xml进行配置<Host>里的<Context>标签里的path. <Context ...

随机推荐

  1. PHP学习创建水印,缩略图

    今天网上学习了一段PHP创建缩略图还有打水印的代码,如下: 其中将图片的路径作为参数传给函数,打水印的过程就是首先获取图片和logo的参数信息,然后将logo图片拷贝到原图的某个位置,然后保存,水印打 ...

  2. UVA - 11754 Code Feat (分块+中国剩余定理)

    对于一个正整数N,给出C组限制条件,每组限制条件为N%X[i]∈{Y1,Y2,Y3,...,Yk[i]},求满足条件的前S小的N. 这道题很容易想到用中国剩余定理,然后用求第k小集合的方法输出答案.但 ...

  3. C# Message 消息处理

    一.消息概述 Windows下应用程序的执行是通过消息驱动的.消息是整个应用程序的工作引擎,我们需要理解掌握我们使用的编程语言是如何封装消息的原理.C#自定义消息通信往往采用事件驱动的方式实现,但有时 ...

  4. linux 标准化

    Unix 1969 年诞生于 AT&T 贝尔实验室,并在 1973 年使用 C 语言进行了重写,从此就具有了很好的可移植性.但是当 AT&T 在 1984 年由于分拆而得以进入计算机领 ...

  5. 在Linux上利用core dump和GDB调试segfault

    时常会遇到段错误(segfault),调试非常费劲,除了单元测试和基本测试外,有些时候是在在线环境下,没有基本开发和测试工具,这就需要调试的技能.以前介绍过使用strace进行系统调试和追踪<l ...

  6. Linux系统下如何去掉文件的@属性

    前几天从别处copy了一个memcached.so文件,发现运行不了,用ls -l 看了一下发现memcached.so多了一个@属性,如何去掉这个@属性呢? 第一步:ls -laeO@ 第二步:xa ...

  7. 分布式代码管理github

    Git是世界上最先进的分布式版本的控制系统,特点是:简单大气上档次. Linus在1991年创建了开源的Linux,从此,Linux系统不断发展,已经成为最大的服务器系统软件了.

  8. javascript——对象的概念——函数 2 (内建函数与类型转换)

    javascript 有许多内建函数,用于各种操作,以下为常用的内建方法. 1.parseInt(object,int):将输入的 int 进制的值 object 转换为 10 进制的数值: obje ...

  9. form(去掉关闭按钮,禁止调整大小)

    禁止Form窗口调整大小方法:FormBorderStyle 设为FixedSingle: 不能使用最大化窗口: MaximuzeBox 设为False: 不能使用最小化窗口:   MinimizeB ...

  10. C#改变LInqToSQL的引用地址,读取config的数据库字符串

    C#改变LInqToSQL的引用地址,读取config的数据库字符串修改Properties 下 Settings.Settings 下 Settings.Designer.cs 下 return ( ...