maven技术文今日看点

maven---13使用maven构建Web应用

2016-12-12  本文已影响727人  zlcook

1.简介

之前的maven项目打包类型都为pom或者POM,今天讲一下用maven构建web应用,web应用的打包类型为war。

2.Web项目的目录结构

war文件目录结构如下:

war文件目录结构

jar文件目录结构如下:

-jar/
  +META-INF/
  +packagename
  |+ java.class
  |+ ...

2.1Maven对web项目的布局约定

web项目的maven目录结构 eclipse中maven结构的web项目 项目打包配置

3.编写web项目

4.使用jetty-maven-plugin进行测试

4.1需求背景

4.2实践

4.2.1配置插件

使用org.eclipse.jetty,该插件要求maven3.3+级以上版本。org.eclipse.jetty

    <plugin>
               <groupId>org.eclipse.jetty</groupId>
                <artifactId>jetty-maven-plugin</artifactId>
                <version>9.3.14.v20161028</version>
                <configuration>
                  <scanIntervalSeconds>10</scanIntervalSeconds>
                  <webApp>
                    <contextPath>/test</contextPath>
                  </webApp>
                  <httpConnector>
                    <port>8168</port>
                    <host>localhost</host>
                  </httpConnector>
                </configuration>
            </plugin>
 <pluginGroups>
    <!-- pluginGroup
     | Specifies a further group identifier to use for plugin lookup.
    <pluginGroup>com.your.plugins</pluginGroup>
    -->
    <pluginGroup>org.eclipse.jetty</pluginGroup>
    ....
  </pluginGroups>

4.2.2启动jetty

现在运行如下命令启动jetty-maven-plugin:

mvn jetty:run

默认端口8080,希望使用其他端口通过jetty.http.port参数,如

mvn jetty:run -Djetty.http.port=9999

启动jetty之后,用户修改类、jsp、html等都会被插件扫描到并重新自动部署。
4.2.3jetty-maven-plugin的其它配置
上面是jetty-maven-plugin的最核心配置,如果有需要可以自定义web.xml位置,项目class文件位置,web资源目录位置等。还能以war包方式部署项目,甚至在maven生命周期嵌入jetty-maven-plugin等,具体看官网介绍:org.eclipse.jetty

4.3其它jetty-maven-plugin插件

除了上面的配置jetty的插件外,还有其它的,可以选择使用。网址org.mortbay.jetty,其配置我测试过了,也可以使用。同样也需要在settings.xml中配置pluginGroup。

    <plugin>
                <groupId>org.mortbay.jetty</groupId>
                <artifactId>maven-jetty-plugin</artifactId>
                <version>6.1.5</version>
                <configuration>
                    <webAppSourceDirectory>src/main/webapp</webAppSourceDirectory>
                    <scanIntervalSeconds>5</scanIntervalSeconds>  每隔10秒查看项目是否有变化,有变化重新编译
                    <contextPath>/iqasweb</contextPath> 
                    <connectors> 
                    org.mortbay.jetty.nio.SelectChannelConnector
                        <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
                            <port>8088</port>   服务器监听端口
                        </connector>
                    </connectors>
                </configuration>
            </plugin> 

运行命令:jetty:run

5.使用Cargo实现自动化部署

插件官网:Cargo

5.1需求

5.2部署至本地Web容器

5.2.1standalone模式

官网standalone模式

 <!-- 配置cargo-maven2-plugin插件实现自动部署,命令cargo:start -->
       <plugin>
        <groupId>org.codehaus.cargo</groupId> 
        <artifactId>cargo-maven2-plugin</artifactId>
        <version>1.5.1</version>
        <configuration>
            <container>
              <containerId>tomcat8x</containerId>
              <home>D:\Soft\tomcat\tomcat8.0.32</home>
            </container>
            <configuration>
              <type>standalone</type>
              <home>${project.build.directory}/tomcat8x</home>
              <properties>
                <cargo.servlet.port>8083</cargo.servlet.port>
              </properties>
            </configuration>
        </configuration>
      </plugin> 

5.2.2运行

mvn clean package cargo:run

当然如果target已经有构建好的war可以直接cargo:run

  <pluginGroups>
...
<pluginGroup>org.codehaus.cargo</pluginGroup>
  </pluginGroups>

不然出现以下错误

[ERROR] No plugin found for prefix 'cargo' in the current project and in the plu
gin groups [org.apache.maven.plugins, org.codehaus.mojo] available from the repo
sitories [local (D:\Soft\maven\maven_jar\repository), nexus (http://172.19.201.1
55:8081/repository/maven-public/)] -> [Help 1]

5.2.3结束

运行成功

命令:Ctr+C结束

5.2.4existing模式

要将应用直接部署到现有的Web容器下,使用该模式。

<plugin>
        <groupId>org.codehaus.cargo</groupId> 
        <artifactId>cargo-maven2-plugin</artifactId>
        <version>1.5.1</version>
        <configuration>
            <container>
              <containerId>tomcat8x</containerId>
              <home>D:\Soft\tomcat\tomcat8.0.32</home>
            </container>
            <configuration>
              <type>existing</type>
              <home>D:\Soft\tomcat\tomcat8.0.32</home>
              <properties>
                <cargo.servlet.port>9996</cargo.servlet.port>
              </properties>
            </configuration>
        </configuration>
      </plugin> 

和standalone不同的是configuration下的目录表示现有Web容器目录,运行mvn cargo:start之后,便能够在tomcat的webapps子目录看到被部署的Maven项目。

5.3部署至远程web容器(吐血)

5.3.1配置

<!-- 配置cargo-maven2-plugin插件实现自动部署,部署至远程Web容器,命令cargo:start -->
       <plugin>
        <groupId>org.codehaus.cargo</groupId> 
        <artifactId>cargo-maven2-plugin</artifactId>
        <version>1.4.4</version>
        <configuration>
            <container>
              <containerId>tomcat8x</containerId>
              <type>remote</type>
            </container>
            <configuration>
             <type>runtime</type>
             <properties>
              <cargo.remote.username>tomcat_script</cargo.remote.username>
              <cargo.remote.password>tomcat_script</cargo.remote.password>
              <cargo.remote.uri>http://localhost:8080/manager/text</cargo.remote.uri>
             </properties>
            </configuration>
        </configuration>
      </plugin> 

注意:配置的tomcat用户名要有manager-scripte权限。即在tomcat-users.xml配置

  <user username="tomcat_script" password="tomcat_script" roles="manager-script"/>

对于的tomcat6及之前的版本,远程连接地址的写法和tomcat7、tomcat8不同,如下。

<cargo.remote.manager.url>http://localhost:8080/manager/html</cargo.remote.manager.url>

5.3.2运行

5.3.3没弄懂的地方

上面部署的远程tomcat其实是在本地localhost,部署是成功的,当我把项目部署到远程的tocmat上时即修改管理地址和远程tomcat的管理账号时。

<cargo.remote.uri>http://192.19.106.168:8080/manager/text</cargo.remote.uri>

结果出错:至今不知道问题出在哪,找了好久。。。。。。我在想是不是我的部署的项目太大了298M。但是部署到本地没有问题啊??希望懂得可以帮我解答一下,出错提示如下,查了很久说是权限,权限设置了manager-script,但是本地都可以,就是部署到远程不可以。。。。

[ERROR] Failed to execute goal org.codehaus.cargo:cargo-maven2-plugin:1.4.4:rede
ploy (default-cli) on project iqasweb: Execution default-cli of goal org.codehau
s.cargo:cargo-maven2-plugin:1.4.4:redeploy failed: Failed to redeploy [E:\Reposi
tory\iqasproject\iqasweb\target\iqasweb-remote.war]: The username you provided i
s not allowed to use the text-based Tomcat Manager (error 403): Server returned
HTTP response code: 403 for URL: http://172.19.201.155:8080/manager/text/list ->

留言

有什么不懂的一起探讨一下吧,欢迎留下宝贵意见,喜欢就点个赞吧(哈哈),多谢鼓励。

上一篇 下一篇

猜你喜欢

热点阅读