• 《Maven实战》笔记-8-构建部署Web项目


     
    一、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:workspaceQianduManagemanage-admin argetmanage-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>
     
     
     
     
     
     
     





  • 相关阅读:
    Android开发_Animation
    spring开发_JDBC操作MySQL数据库_使用xml配置事务管理
    spring开发_AOP_代理模式
    java file 文件操作 operate file of java
    spring开发_spring构造注入Bean
    spring开发_spring中Bean的作用域_singleton_prototype
    spring开发_JDBC操作MySQL数据库
    java的jxl技术导入Excel
    spring开发_spring环境搭建
    魅族m8开发 step by step(1)(让程序跑起来)
  • 原文地址:https://www.cnblogs.com/myitroad/p/6131228.html
Copyright © 2020-2023  润新知