前言:

  前段时间进行了一点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%\bin;

    

    配置后在控制台输入 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:

 package cn.edu.HelloWorld;

 public class Hello{
public String sayHello(){
return "Hello Maven";
}
}

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

 package cn.edu.HelloWorld;

 import org.junit.*;

 public class TestClass{
@Test
public void testHello(){
System.out.println(new Hello().sayHello());
}
}

  添加一个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

Maven——快速入门手册(学习记录)的更多相关文章

  1. Maven快速入门(一)Maven介绍及环境搭建

    做开发的程序员都知道,在系统开发需要各自各样的框架.工具.其中有一种工具不管你是初级程序员还是高级程序员都必须熟练掌握的,那就是项目管理工具(maven.ant.gradle).接下来就总结Maven ...

  2. Github快速入门手册

    最近在试用Github,开源的思想也让人觉得把一些经验分享出来是非常好的事情.附件是doc文件,如有需要请注意查收.希望能对你有帮助. GITHUB基于互联网的版本控制快速入门手册 如有不妥,欢迎指正 ...

  3. (4)Maven快速入门_4在Spring+SpringMVC+MyBatis+Oracle+Maven框架整合运行在Tomcat8中

    利用Maven 创建Spring+SpringMVC+MyBatis+Oracle 项目 分了三个项目  Dao   (jar)   Service (jar)   Controller (web) ...

  4. (1)Maven快速入门_1maven安装

    Maven 快速入门 1.1 Maven官网下载     windows 系统 下载 下图红色框选处. 下载到本地解压, 创建一个本地maven仓库的目录 maven_lib 配置Maven的环境变量 ...

  5. 零基础快速入门web学习路线(含视频教程)

    下面小编专门为广大web学习爱好者汇总了一条完整的自学线路:零基础快速入门web学习路线(含视频教程)(绝对纯干货)适合初学者的最新WEB前端学习路线汇总! 在当下来说web前端开发工程师可谓是高福利 ...

  6. Java实战及解析 — Maven快速入门

    五分钟快速入门 mvn --version mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -Darche ...

  7. 【笔记目录2】【jessetalk 】ASP.NET Core快速入门_学习笔记汇总

    当前标签: ASP.NET Core快速入门 共2页: 上一页 1 2  任务27:Middleware管道介绍 GASA 2019-02-12 20:07 阅读:15 评论:0 任务26:dotne ...

  8. Maven快速入门(二)手动创建maven项目hellomaven

    之前讲过Maven介绍及环境搭建,介绍了maven的作用和如何搭建maven环境.接下来就以一个helloworld的例子来说一说如何创建maven项目以及maven项目的项目结构,最后讲maven如 ...

  9. Maven快速入门(三)Maven的坐标和仓库

    之前通过一个helloworld的例子来说一说如何创建maven项目以及maven项目的项目结构,然后讲maven如何编译运行项目.接下来介绍maven中几个比较重要的概念:坐标和仓库.Maven快速 ...

随机推荐

  1. Java文件中为什么只能有一个public修饰的类, 并且类名还必须与文件名相同

    当编写一个java源代码文件时,此文件通常被称为编译单元(有时也被称为转译单元).每个编译单元都必须有一个后缀名.java,而在编译单元内则可以有一个public类,该类的名称必须与文件的名称相同(包 ...

  2. Exiting the Matrix: Introducing Metasploit's Hardware Bridge

    Metasploit is an amazing tool. You can use it to maneuver through vast networks, pivoting through se ...

  3. 详解Google Chrome浏览器(操作篇)(一)

    开篇概述 在上篇博客中详解Google Chrome浏览器(理论篇)一文中,主要讲解了Chrome 搜索引擎使用.Chrome安装和基本操作.Chrome 基本架构.多线程等原理性问题,这篇将重点讲解 ...

  4. 正则表达式中的match,test,exec,search的返回值

    今天突然被问到了正则表达式,因为长时间不用突然不知道怎么用了,只知道有这么个东西.然后去网上查了一下,感觉写的不少,但解释的有点模糊,今天我来浅谈一下. 1,match的用法 A,在不加全局“g”的情 ...

  5. Python学习--21 电子邮件

    发送邮件 SMTP是发送邮件的协议,Python内置对SMTP的支持,可以发送纯文本邮件.HTML邮件以及带附件的邮件. Python对SMTP支持有smtplib和email两个模块,email负责 ...

  6. 制作 OpenStack Windows 镜像 - 每天5分钟玩转 OpenStack(152)

    这是 OpenStack 实施经验分享系列的第 2 篇. OpenStack 通过 Glance 镜像部署 instance,上一节我们介绍了 linux 镜像制作方法,windows 镜像与 lin ...

  7. HttpClient构造文件上传

    在项目中我们有时候需要使用到其他第三方的api,而有些api要求我们上传文件,search一下,下面将结果记录一下喽! 含义 ENCTYPE="multipart/form-data&quo ...

  8. Lua与.net的CLR相互调用

    工程环境搭建: 下载luainterface-1.5.3.zip文件,使用到的dll为Built目录下的LuaInterface.dll.lua51.dll.luanet.dll LuaInterfa ...

  9. KVO的概述与使用

      一,概述 KVO,即:Key-Value Observing,它提供一种机制,当指定的对象的属性被修改后,则对象就会接受到通知.简单的说就是每次指定的被观察的对象的属性被修改后,KVO就会自动通知 ...

  10. CEOI 2014 wall (最短路)

    描述:给定一个网格图,每个区间可能会有城市,求在边上建墙使无法从外边到达所有城市切所有城市必须联通 n,m<=400 首先对于30%的数据,n,m<=10我们可以考虑用数位dp来解决这个问 ...