zoukankan      html  css  js  c++  java
  • Maven——快速入门手册(学习记录)

    前言:

      前段时间进行了一点maven的入门学习,在这里做个记录,希望能帮到一些正在学习的朋友们。maven版本为3.3.9。希望大家觉得好的点个赞,觉得不好的多提提意见和建议做个交流。这里也贴出我学习Maven的视频地址,大家也可以自行观看http://www.imooc.com/learn/443


    目录:

    1. 安装配置maven环境

    2. maven目录结构

    3. HelloMaven

    4. 常用构建命令

    5. 使用archetype插件自动建立目录

    6. 坐标&仓库

    7. 生命周期&插件的使用

    8. pom.xml常用标签介绍

    9. maven依赖(范围、传递、冲突)

    10. 聚合&继承

    11. 构建规范目录的web项目

    12. 构建非规范目录的web项目

    13. 构建web项目中使用tomcat插件


     正文:

      1.安装配置maven环境

        首先,在官网中下载maven组件。进入官网后,在左边菜单找到Download选项,点击进入Download页面。

          

        下拉页面,在File下选择合适的文件进行下载。

          

        Maven与JDK一样,需要配置环境变量,先建立一个M2_HOME变量,方便以后移动的时候修改路径,随后在Path中加入:%M2_HOME%in;

        

        配置后在控制台输入 mvn -v ,出现maven及jdk的相关信息即为配置成功:

        

        至此,即可完成maven环境变量的配置。

     2.maven目录结构

      maven工程与以往的java工程目录结构有所不同,以往的java工程目录目录一般只有一个src用于存放包及java文件,而maven工程目录长这样: 

      src
        -main
          -java
            -包
        -test
          -java
            -包

      一般我们将一些主要的内容,放在main/java下面,而测试代码放在test/java下,这样在运行时,maven才可以识别目录并进行编译。

     3.HelloMaven

      了解了目录结构后,就可以开始第一个maven项目了。(为了更加便于理解maven,暂时采用控制台+记事本Editplus的操作方式,IDE将在后面使用。)

      先按照目录结构建立好目录:,这里包名为cn.edu.HelloWorld

      先编写Hello.java:

    1 package cn.edu.HelloWorld;
    2 
    3 public class Hello{
    4     public String sayHello(){
    5         return "Hello Maven";
    6     }
    7 }

      再编写测试TestClass.java,这里使用junit4框架:

     1 package cn.edu.HelloWorld;
     2 
     3 import org.junit.*;
     4 
     5 public class TestClass{
     6     @Test
     7     public void testHello(){
     8         System.out.println(new Hello().sayHello());
     9     }
    10 }

       添加一个maven的配置文件pom.xml(该文件在一些开源框架中如struts,spring中可以找到,也可以百度进行下载,在这里也提供一份,以供复制):

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
        <modelVersion>4.0.0</modelVersion>
            <!--groupId、artifactId、version为必需,将在后面介绍-->
        <groupId>cn.edu.HelloWorld</groupId>
        <artifactId>maven01</artifactId>
        <version>0.0.1SNAPSHOT</version>
    
        <dependencies>
                    <!--在这里引入junit4的依赖-->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.12</version>
            </dependency>
            
        </dependencies>
    </project>
    pom.xml

       打开控制台,进入到工程的目录下,执行mvn compile命令:

       

       看到BUILD SUCCESS表示编译成功(第一次编译可能需要下载环境比较慢)

       

      编译成功后会在项目下生成一个target文件夹,里面存放编译后的文件

      

      编译成功后执行mvn test命令,运行测试类:

       

      看到SUCCESS即可看到结果,输出Hello Maven:

      

     4.常用构建命令

      来看一下maven几个常用的构建命令,格式为mvn xxx:   

        mvn
           -v 查看maven版本及其他相关信息
           compile 编译maven项目,并生成target文件夹
           test 运行test目录下的测试文件,即测试
           package 将项目打包,默认打包为jar格式,也可以打包成war格式用于服务器运行
           install 将打包的jar文件安装到maven本地仓库(仓库后面会详细介绍)
           clean 删除targert,相当于清除缓存

     5.使用archetype插件自动建立目录

      在前面我们采用手动的方式进行目录建立,显得略微有点繁琐,那么这里介绍一个插件用于生成符合maven规范的目录。

      首先从控制台进入需要生成文件夹的位置,然后运行mvn archetype:generate(第一次需要下载组件比较慢,若是下载不下来可以设置一下maven的国内镜像库,百度即有步骤,这里不做介绍):

      

      出现以下界面,提示我们选择生成一个版本类型的maven结构,这里选择7(默认为7),quickstart:

      

      确认后要求输入groupId、artifactId(也会作为文件夹名)、version(默认为1.0-SNAPSHOT)、package(即包的结构),这里依次输入:

      

      提示确认,输入Y确认后进行生成。出现SUCCESS,则表示生成成功:

       

      进入生成的项目中,输入mvn compile test进行确认:

      

       

      打开文件夹即可看到我们生成的文件目录,已经符合了maven规范,且可以运行。

     6.坐标&仓库

      坐标:

       maven使用groupId、artifactId、version表示坐标,每个坐标都唯一的指向一个maven项目,简单介绍一下这几个标签

          groupId:项目组织唯一的标识符,一般为反写的公司网址+项目名
          artifactId:项目的唯一的标识符,一般为项目名+模块名
          version:版本号 x.x.x+版本类型
            第一个x表示大版本号
            第二个x表示分支版本号
            第三个x表示小版本号(可省略)
            常见版本类型:
              snapshot快照
              alpha内部测试
              beta公测
              release稳定
              GA正式发布

          注:包名应与groupId+artifactId相吻合

       仓库:

        maven中的依赖管理就是靠着仓库,仓库分为中央仓库及本地仓库。在编译项目时,maven会根据配置的依赖,先在本地仓库中进行搜索,若是没有则再去中央仓库进行搜索,而搜索便是采用坐标进行查找。

        默认本地仓库位于C盘之下,如果进行还原系统之类的便会清空十分不便,这里说一下更改本地仓库路径的方法:

        在maven组件目录下的conf文件夹内,有一个setting.xml,打开文件,搜索localRepository标签,使用localRepository标签修改路径即可

        

     7.生命周期&插件的使用

      生命周期:

      多个生命周期之间相互独立。每个生命周期含有多个阶段,阶段按顺序执行,运行后阶段时,前阶段会自动执行。比如,直接运行mvn test命令,那么执行该命令时,会自动的附带mvn compile命令,因为test阶段在compile阶段之后。  

      完整的项目构建构成包括:
        清理、编译、测试、打包、集成测试、验证、部署

        clean 清理项目,包括以下阶段:
          pre-clean 执行清理前
          clean 清理上一次构建生成的所有文件
          post-clean 执行清理后的文件
        default 构建项目(核心:常用),包括以下阶段
          compile 编译
          test 测试
          packeage 打包
          install 安装
        site 生成项目站点,根据pom中信息生成项目站点,包括以下阶段
          pre-site 在生成项目站点前要完成的工作
          site生成项目的站点文档
          post-site在生成项目站点后要完成的工作
          site-deploy发布生成的站点到服务器上

        插件:

         maven中提供了许多功能强大的插件,让我们更好的管理项目。一个插件通常提供了一组目标,可使用以下语法来执行:

          mvn [plugin-name]:[goal-name]
       例如我们之前使用mvn archetype:generate,插件名为archetype,而目标为generate。我们可以在官网的Plugins标签下,查找到插件的坐标及插件目标的详细描述。
       Maven 提供以下两种类型插件:
    类型描述
    构建插件 在生成过程中执行,并在 pom.xml 中的<build/> 元素进行配置
    报告插件 在网站生成期间执行,在 pom.xml 中的 <reporting/> 元素进行配置

        以下是一些常见的插件列表:

    插件描述
    clean 编译后的清理目标,删除目标目录
    compiler 编译 Java 源文件
    surefile 运行JUnit单元测试,创建测试报告
    jar 从当前项目构建 JAR 文件
    war 从当前项目构建 WAR 文件
    javadoc 产生用于该项目的 Javadoc
    antrun 从构建所述的任何阶段运行一组 Ant 任务
    source 从当前项目构建带源码的JAR文件

        这里我们通过使用source插件作为例子,来看看如何在maven中配置插件:

         首先我们快速创建一个maven项目(可以使用archetype),在pom.xml中加入以下内容:

     <build>
      <!-- 配置插件集 -->
          <plugins>
              <plugin>
                <!--使用插件的坐标进行引用 -->
                  <groupId>org.apache.maven.plugins</groupId>
                  <artifactId>maven-source-plugin</artifactId>
                  <version>3.0.0</version>
                  
                  <executions>
                      <execution>
                          <!-- 绑定在哪个过程时一同执行,这里我们让它在使用package打包时一同执行 -->
                          <phase>package</phase>
                        <!--执行的目标类型,关于目标的详细介绍可以在maven官网中查到-->
                          <goals>
                              <goal>jar-no-fork</goal>
                          </goals>
                      </execution>
                  </executions>
              </plugin>
          </plugins>
      </build>

      接下来,在命令控制台,输入mvn package查看结果:

      

      

      出现成功信息后,可以在我项目的target中找到打包后的jar文件及src-jar文件

      

       从这个例子中,我们可以总结出以下几个关键点:

      • 插件可在 pom.xml 使用的 plugin 元素来指定
      • 可以通过将它们绑定到其他的过程中一起执行,这里绑定到package中。

     8.pom.xml常用标签介绍

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <!-- 当前pom的版本-->
        <modelVersion>4.0.0</modelVersion>
    
        <!--坐标-->
        <groupId>cn.edu</groupId>
        <artifactId>maven04</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <!-- 默认是jar,其他war zip pom等 -->
        <packaging>jar</packaging>
    
        <!--项目描述名 -->
        <name>maven04</name>
        <!-- 项目地址 -->
        <url>http://maven.apache.org</url>
    
        <!-- 配置参数 -->
        <properties>
            <!-- 这里配置项目编译编码为UTF-8-->
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        </properties>
        
        <!-- 开发人员信息 -->
        <developers></developers>
        <!-- 项目描述 -->
        <description></description>
        <!-- 许可信息 -->
        <licenses></licenses>
        <!-- 组织信息 -->
        <organization></organization>
        <!-- 依赖集,用于配置依赖 -->
        <dependencies>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>3.8.1</version>
                
                <!-- 依赖范围:这个jar包只在范围内生效,范围外引用会报错,这里让junit只在test时被依赖。
                                其他一些情况,如:servlet-api.jar,在编译阶段需要引用,而在服务器运行阶段则不需要引用,就可以使用scope-->
                <scope>test</scope>
    
                <!-- 默认为false,子项目将会继承,true时子项目并需显式引用 -->
                <optional>false</optional>
    
                <!-- 排除依赖列表:用于去除传递依赖等,在后面会详细介绍-->
                <exclusions>
                    <exclusion></exclusion>
                </exclusions>
                
    
            </dependency>
        </dependencies>
        
        <!-- 依赖管理
                为依赖进行统一管理,如果在父项目中声明此标签时,在子项目中不需声明,确保父子项目依赖版本一致;
                如子项目需要不同版本的依赖,只需在子项目中进行声明即可,将会覆盖父项目中的声明。
         -->
        <!--     
            <dependencyManagement>
                <dependencies>
                    <dependency></dependency>
                </dependencies>
            </dependencyManagement> 
        -->
        
        <!--配置构建时的属性-->
        <build>
            <plugins></plugins>
        </build>
        
        <!-- 指定父模块 -->
            <!-- <parent></parent> -->
    
        <!-- 用于聚合编译多个maven模块 -->
        <modules></modules>
    </project>

     9.maven依赖(范围、传递、冲突)

      本节开始使用Eclipse进行编写,使用上与控制台方式出入不大。先略微介绍下Eclipse中构建maven项目:在新建项目时选择maven project(需安装maven插件,eclipse3.1以上自带)

      

      设置好路径后在选择版本的界面,选择quickstart版本:

      

      输入信息后点击finish即可构建maven项目:

      

      完成步骤后,一般情况下会自动创建符合规范的maven项目。个别出现文件夹不符合规范的情况,可以使用项目右键→new→source folder自行创建补充。

      运行命令只要右键项目,run as→maven build的Goals中输入即可,这里输入时不需输入mvn。例如:mvn compile只需输入compile。

      范围:   

        首先要知道,maven中提供了三种classpath:编译、测试、运行
        scope标签
          -compile 默认,编译测试运行均有效,会传递
          -provided 在编译和测试时有效,如servletAPI可以加入,不传递
          -runtime 在测试和运行时有效,如JDBCAPI可以加入
          -test 在测试时有效,如junit可以加入
          -system 在编译和测试时有效,与本机系统相关联,移植性差,在系统中以外部jar包的形式引入,不会在仓库中查找
          -import 导入,只能用在dependecyManagement中,表示从其他pom中导入dependecy的配置

      传递:

        先来看看什么是传递依赖,比如现在有这么个情况:

        C依赖B、B依赖A——C→B→A,那么此时C也会依赖A且会包含A中的依赖,这就是传递依赖。接下来我们通过一个例子来详细了解依赖及如何消除传递依赖:

        现有ABC三个项目:

        

      A中额外依赖了一个commons-io的jar包:

      

      B中对A进行依赖:

      

      C中对B进行依赖:

      

      保存之后可以看到,C中不但包含B,还包含A和A依赖的common-io:

      

      那么如何消除传递依赖呢,这里就使用到<exclusion>标签了,在C中配置依赖B的地方加入以下内容:

      

      保存后就可以看到,C中关于A的依赖消失了,传递依赖的问题就解决了。

       

       冲突:

        假设现在有这么个情况:A依赖common-io的2.4版本,B依赖common-io的2.5版本,C依赖A、B,那么此时C中的common-io是哪个版本的?

        这就是依赖冲突,在maven中应对依赖冲突有两种解决方式:短路优先,先声明优先

          先声明优先:顾名思义,在pom中,写在配置文件上面的优先,比如此时A的依赖配置在B之上,那C中就为2.4版本的common-io。

          短路优先:优先选择依赖路径较短的一端。假设现在多出一个D,依赖情况改为D依赖B,C依赖A、D——C→A、C→D→B,那么这里就是A的依赖路径比较短,所以为2.4版本。

     10.聚合&继承

      聚合:

        试想一下这样的情况,在一个项目中,分模块使用了maven,那么可能在这个项目中会有五六个,或者更多的maven项目存在。如果此时需要编译或测试要怎么办呢,进入每个maven项目中进行mvn compile么,那就要执行五六次的compile命令,十分繁琐,这里就可以用maven的聚合来解决这个问题。

        现有ABC三个工程,那么我们使用一个新的工程D,来聚合他们,以后只要对D进行编译即可对三个工程同时进行编译。使用module标签进行聚合:

      <modules>
        <!--这里的路径是基于D项目的pom.xml路径,module标签内为指向其他项目的pom文件的路径
            这里我的ABCD项目在同一个文件夹内,那么从D内的pom中,通过../项目名,来找到其他项目的pom.xml-->
          <module>../A</module>
          <module>../B</module>
          <module>../C</module>
      </modules>

      继承:

        另一种情形,如果多个maven项目具有相同的依赖时或配置时,那么应该如何处理呢?这里就用到继承的概念,在maven中使用<parent>标签来进行继承,下面通过一个例子来看一下:

        首先建立一个项目,命名为parent,在parent的pom文件声明一个common-io的依赖,不过这里用到了dependencyManagement:

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>cn.edu</groupId>
        <artifactId>parent</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <packaging>pom</packaging>
    
        <name>parent</name>
        <url>http://maven.apache.org</url>
    
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.12</version>
                <scope>test</scope>
            </dependency>
        </dependencies>
    
        <dependencyManagement>
            <!-- 在这里声明的依赖可以被子项目继承引用 -->
            <dependencies>
                <dependency>
                    <groupId>commons-io</groupId>
                    <artifactId>commons-io</artifactId>
                    <version>2.4</version>
                </dependency>
            </dependencies>
        </dependencyManagement>
    </project>

      可以看到,虽然我们在父项目中配置了依赖,但是却不会在父项目中被引用:

        

      在子项目B中,配置继承parent并使用parent中的common-io版本:

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
    
        <groupId>cn.edu</groupId>
        <artifactId>B</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <packaging>jar</packaging>
    
        <name>B</name>
        <url>http://maven.apache.org</url>
    
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        </properties>
    
        <!-- 在parent标签中使用父项目的坐标进行配置 -->
         <parent>
              <groupId>cn.edu</groupId> 
              <artifactId>parent</artifactId> 
            <version>0.0.1-SNAPSHOT</version> 
        </parent>
        
        <dependencies>
            <!-- 此处使用依赖时,就不需声明版本 -->
            <dependency> 
                <groupId>commons-io</groupId> 
                <artifactId>commons-io</artifactId> 
            </dependency>
            
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.12</version>
                <scope>test</scope>
            </dependency>
        </dependencies>
    </project>

       配置后保存即可看到,此处的依赖版本即为父项目中的版本:

      

     11.构建web项目

      这里介绍两种的web项目:规范目录的web项目及传统目录的web项目。再介绍使用两种服务器容器:tomcat和jetty运行的方法。由于tomcat中有许多的需要注意的问题,较为复杂,所以这里先从简单的jetty入手。

      首先构建项目,这次选择版本的时候我们选择webapp:

      

      建立好后的webapp项目,其目录结构是这样的:

      

      这里的resources文件夹用于存放java文件、包、xml配置文件等等,与我们传统意义上的src文件夹是一致的。这里src下的webapp文件夹则等同于我们Web项目中的WebRoot或WebContent,一些页面和样式等文件放在这个目录下。

      接下来看看pom文件:

      先注意到我们这里的打包方式变为了war,web项目必需先编译打包,然后才能部署到web容器上运行。之后只需配置我们的jetty运行插件。

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>cn.edu</groupId>
        <artifactId>mavenweb</artifactId>
        <packaging>war</packaging>
        <version>1.2.2-SNAPSHOT</version>
    
        <name>mavenweb Maven Webapp</name>
    
        <url>http://maven.apache.org</url>
    
        <dependencies>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.12</version>
                <scope>test</scope>
            </dependency>
        </dependencies>
    
        <build>
            <finalName>mavenweb</finalName>
            <plugins>
                <!--这里用到jetty的插件,在官网中可以找到坐标-->
                <plugin>
                    <groupId>org.eclipse.jetty</groupId>
                    <artifactId>jetty-maven-plugin</artifactId>
                    <version>9.4.1.v20170120</version>
                </plugin>
            </plugins>
        </build>
    </project>
            

      先使用package命令进行打包,可以看到target中出现了我们webapp文件夹下的内容,以及打包好的war文件。

       

      复制使用这个war文件也可完成部署。但我们这里使用jetty插件,在命令框中输入jetty:run命令,观察到

    说明服务器启动完成。

      接下来在浏览器使用localhost:8080即可看到我们的项目中的index.jsp

      

      至此就完成了我们规范目录的web项目构建。

     12.构建非规范目录的web项目

      使用maven的web项目结构,可能会有少许的不习惯,或者我们要将以前开发的项目转为mavenweb项目的话,那要怎么办呢?这里就介绍下非规范目录的web项目要如何构建。

       首先,这是我们的项目目录结构,java等文件还是放在main/java下,而页面等其他资源文件放在WebContent下:

      

      看看pom文件中的配置方法:

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>cn.edu</groupId>
        <artifactId>mavenweb</artifactId>
        <packaging>war</packaging>
        <version>1.2.2-SNAPSHOT</version>
        <name>mavenweb Maven Webapp</name>
        <url>http://maven.apache.org</url>
    
        <dependencies>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.12</version>
                <scope>test</scope>
            </dependency>
        </dependencies>
    
        <build>
            <finalName>mavenweb</finalName>
            <!-- 资源集 -->
            <resources>
                <!-- 非规范资源文件目录打包 -->
                <resource>
                     <!-- 指定资源存放的目录(必需,不写会报错),即resources目录的变更。以下配置中的的相对目录改为该目录 -->
                    <directory>src/main/java</directory>
                    <includes>
                        <include>*.xml</include>
                    </includes>
                    <!-- 是否替换资源文件中的属性,如${username},替换为pom中指定的properties-->  
                    <filtering>false</filtering>    
                </resource>
            </resources>
            <plugins>
                            <!--这里使用到war plugin,同样的,详细介绍及坐标在官网中可以找到-->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-war-plugin</artifactId>
                    <version>3.0.0</version>
                    <configuration>
                        <!-- 指定web.xml的文件位置 -->
                        <webXml>WebContent/WEB-INF/web.xml</webXml>
                        <!-- war的源目录,由哪个文件夹打包成war文件,用于更改页面样式等的资源目录 -->
                        <warSourceDirectory>WebContent</warSourceDirectory>        
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.eclipse.jetty</groupId>
                    <artifactId>jetty-maven-plugin</artifactId>
                    <version>9.4.1.v20170120</version>
                </plugin>
            </plugins>
        </build>
    </project>

      完成配置后,使用package命令进行打包。看到target中的打包结果,确实更改了来源目录并打包成功:

      

      

       接下来使用jetty:run或jetty:deploy等运行命令即可成功运行项目。

     13.构建web项目中使用tomcat插件

      使用tomcat时,会遇上许多的问题,在这里整理,希望能帮上一些朋友。

      问题一:tomcat插件版本问题

      tomcat这个插件在官网的描述中是这样的:

      

      那么我这里使用的是tomcat7,我就使用了下面的那份坐标,但是在使用tomcat:run命令是发现:

       

      也是找了好久才发现这个问题,我明明使用的是tomcat7的插件,但是运行起来却是不知道哪里来的6.0版本。

      正确的方式是:运行tomcat7:run命令,其实这点在官网中也有提到,怪自己没认真看了。

       

      tomcat:run默认使用的是6.0版本的tomcat,但是奇怪的一点,我机子上并没有6.0版本的tomcat,那么这里的是哪来的呢?希望有大神知晓的能够解答,先谢过了!

      问题二:Cannot invoke Tomcat manager: Server rened HTTP response code: 403 for URL

      这个问题,第一是要打开tomcat的Manage权限,在百度有许多相关的解决方法,我就不多说了。这里贴几个我觉得写的还不错的帖子:

      http://blog.csdn.net/u012052168/article/details/52448943

      https://my.oschina.net/angel243/blog/178554

      第二个点,也是我遇上的主要问题:Eclipse的tomcat的webapp目录为workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps,而并非$CATALINA_HOME/webapp,这也就导致了Eclipse中启动tomcat的话,是没有Root、Manage等项目的,更不用说Manage权限了。

      解决方式:http://blog.csdn.net/snakewarhead/article/details/6175833

      最后,贴上最终我的pom文件,供大家做个参考:

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>cn.edu</groupId>
        <artifactId>mavenweb</artifactId>
        <packaging>war</packaging>
        <version>1.2.2-SNAPSHOT</version>
        <name>mavenweb Maven Webapp</name>
        <url>http://maven.apache.org</url>
    
        <dependencies>
    
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.12</version>
                <scope>test</scope>
            </dependency>
    
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>javax.servlet-api</artifactId>
                <version>3.1.0</version>
                <scope>provided</scope>
            </dependency>
            <!-- https://mvnrepository.com/artifact/org.apache.struts/struts2-core -->
            <dependency>
                <groupId>org.apache.struts</groupId>
                <artifactId>struts2-core</artifactId>
                <version>2.5.8</version>
            </dependency>
    
        </dependencies>
    
        <build>
    
            <finalName>mavenweb</finalName>
            <!-- 资源集 -->
            <resources>
                <!-- 非规范资源文件目录打包 -->
                <resource>
                     <!-- 指定资源存放的目录(必需,不写会报错)基础目录,以下目录全在该目录下 -->
                    <directory>src/main/java</directory>
                    <includes>
                        <include>*.xml</include>
                    </includes>
                    <!-- 是否替换资源文件中的属性,如${username},替换为pom中指定的properties-->  
                    <filtering>false</filtering>    
                </resource>
            </resources>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-war-plugin</artifactId>
                    <version>3.0.0</version>
                    <configuration>
                        <!-- 指定web.xml的文件位置 -->
                        <webXml>WebContent/WEB-INF/web.xml</webXml>
                        <!-- war的源目录,由哪个文件夹打包成war文件,用于更改资源目录 -->
                        <warSourceDirectory>WebContent</warSourceDirectory>    
    <!--                     <webappDirectory>WebContent</webappDirectory> 打包的目标目录-->    
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.tomcat.maven</groupId>
                    <artifactId>tomcat7-maven-plugin</artifactId>
                    <version>2.1</version>
                    <configuration>
                        <url>http://localhost:8080/manager/html</url>
                        <server>tomcat7</server> <!-- 此处的名字必须和setting.xml中配置的ID一致 -->
                        <username>admin</username>
                        <password>root</password>
                        <path>/mavenweb</path> <!-- 此处的名字是项目发布的工程名 -->
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.eclipse.jetty</groupId>
                    <artifactId>jetty-maven-plugin</artifactId>
                    <version>9.4.1.v20170120</version>
                </plugin>
            </plugins>
        </build>
    </project>
    pom.xml
  • 相关阅读:
    #include <boost/shared_array.hpp>
    #include <boost/shared_ptr.hpp>
    #include <boost/scoped_array.hpp>
    df命令
    telnet命令
    sort 命令
    苏宁大数据面试题
    hive严格模式
    k-means伪代码
    vim编辑器
  • 原文地址:https://www.cnblogs.com/qbzf-Blog/p/6539161.html
Copyright © 2011-2022 走看看