Maven项目管理工具

1 什么是Maven

  1. Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具
  2. Maven是跨平台的项目管理工具。主要服务于基于Java平台的项目构建,依赖管理和项目信息管理。
  3. [相当于iOS cocoapods]
  4. Maven的好处【 lib】
  1. 方便jar的管理
  2. 不需要上传jar包到svn

2如何使用Maven

2.1第一:安装本地Maven

  1. 先打开浏览器访问maven官网【rz】,下载下图红色的zip文件

Maven项目管理工具_第1张图片

  1. 接着解压文件夹到用户目录下C:\Users\guoyongfeng\中,【这里解压的路径随机,个人喜欢放在用户目录而已】
  2. 然后需要配置path环境变量
    1. 系统变量:MAVEN_HOME = C:\Users\guoyongfeng\apache-maven-3.5.0
    2. 系统变量:path = %MAVEN_HOME%\bin

最后打开命令行,输入mvn -version,出现下面内容表示本地maven安装和配置成功了

Maven项目管理工具_第2张图片

 

2.2第二:了解下Maven的仓库

  1. 仓库是用来干啥的呢?其实就是用来存放网上下载到本地的jar
  2. 仓库路径默认情况下在用户目录下C:\Users\guoyongfeng\.m2\repository
  3. 配置仓库路径 在bin目录下的config/settings.xml

Maven项目管理工具_第3张图片

 

在 cmd 中敲并回车执行:mvn help:system

 

maven默认会从上面的服务器(中央仓库) 下载 jar包到本地

 

2.3第三 修改setting.xml配置文件

在mirrors中添加下面的内容,使用阿里云服务器下载jar包,因为国外的下载太慢了,把国外的注释不用

 

     

       

            alimaven

            central

            aliyun maven

            http://maven.aliyun.com/nexus/content/repositories/central/

       

   

       

       

            repo1

            central

            Human Readable Name for this Mirror.

            http://repo1.maven.org/maven2/

       

   

       

       

            repo2

            central

            Human Readable Name for this Mirror.

            http://repo2.maven.org/maven2/

       

 

 

 

2.4第四:安装Eclipse的Maven插件 

  1. 为什么要安装maven插件?
    1. 需要一些命令,需要maven插件
    2. 因为以前创建动态的javaweb项目,以后我们创建的是一个maven项目,maven也是一个web项目,java项目
  2. Maven项目是通过pom.xml文件来管理jar包的
  3. Eclipse安装Maven插件有三种方式
  4. Eclipse neon的版本默认已经安装了maven的插件
  5. 如果是旧版本的Eclipse,就需要手动安装maven插件,
    1. 一种离线安装,比较快
    2. 一种在线安装,比较慢

第一种方式:把插件放在eclipse的dropins中【练】

  1. 【离线安装】,把插件放在eclipse的dropins
  1. 打开preferences点击Maven后,会出现下面的警告框,需要配置下eclipse.ini文件

Maven项目管理工具_第4张图片

Maven项目管理工具_第5张图片

解决上面的问题,只需要在eclipse.ini文件添加下面两行代码

-vm

C:\Program Files\Java\jdk1.8.0_131\bin\javaw

  1. 接着需要点击maven的User Setting选项,配置路径为本地maven的settings.xml路径,如图

Maven项目管理工具_第6张图片

Maven项目管理工具_第7张图片

 

第二种方式:点击EclipseHelp -> Install New Software

  1. 在弹出的界面中,添入下面红色框内容点击OK安装【http://m2eclipse.sonatype.org/sites/m2e
  2. 装完后重启Eclipse

 

Maven项目管理工具_第8张图片

Maven项目管理工具_第9张图片

 

安装完后,会在Eclipse的Preference偏好设置中出现maven选项

 

第三种方式:点击EclipseHelp ->Eclipse Marketplace

  1. 然后在find中搜索maven安装即可

Maven项目管理工具_第10张图片

 

 

3 Maven常用命令

3.1 Maven项目结构

ProjectName

  |-src

  |   |-main

  |   |  |-java        —— 存放项目的.java文件

  |   |  |-resources   —— 存放项目资源文件,如spring, hibernate配置文件

  |   |-test

  |      |-java        ——存放所有测试.java文件,如JUnit测试类

  |      |-resources   —— 测试资源文件

  |-target             —— 目标文件输出位置例如.class、.jar、.war文件

  |-pom.xml           ——maven项目核心配置文件

 

3.2 eclipse创建Maven简单项目

创建项目前,把eclipse中maven配置文件路径改下

 

 

  1. 通过Eclipse在项目浏览器右键创建一个简单的maven项目,项目名为【test1】步骤如图

Maven项目管理工具_第11张图片

 

Maven项目管理工具_第12张图片

Maven项目管理工具_第13张图片

  1. Pom.xml,这里使用【junit 4.10进行单行测试】

<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.0modelVersion>

  <groupId>com.gyfgroupId>

  <artifactId>test1artifactId>

  <version>0.0.1-SNAPSHOTversion>

 

  <dependencies>

  <dependency>

   <groupId>junitgroupId>

      <artifactId>junitartifactId>

      <version>4.10version>

      <scope>testscope>

  dependency>

  dependencies>

project>

 

在学习下面的命令前,打开终端切换到项目路径

 

3.3 mvn compile

      编译

  1. 完成编译操作
  2. 执行完毕后,会生成target目录,该目录中存放了编译后的字节码文件。

3.4 mvn clean

  1. 执行完毕后,会将target目录删除。

3.4 mvn test

      编译,测试,跑测试用例

  1. 完成单元测试操作
  2. 执行完毕后,会在target目录中生成三个文件夹:surefire、surefire-reports(测试报告)、test-classes(测试的字节码文件)

 

3.4 mvn package

      编译,测试,跑测试用例,打包

  1. 完成打包操作
  2. 执行完毕后,会在target目录中生成一个文件,该文件可能是jar、war

 

 

3.4 mvn install

     编译,测试,跑测试用例,打包,最后丢到本地仓库

  1. 执行 mvn install命令,完成将打好的jar包安装到本地仓库的操作
  2. 执行完毕后,会在本地仓库中出现安装后的jar包,方便其他工程引用

 

3.4 mvn 组合命令

  1. mvn clean compile
  2. mvn clean test
  3. mvn clean package
  4. mvn clean install

 

3.5 maven插件集成命令

  1. 当我们安装完maven的插件到eclipse后,插件提供了一些菜单可用
  2. 演示下clean install test 的效果

Maven项目管理工具_第14张图片

 

 

如果再使用过程中,遇到下面问题,解决办法

Maven项目管理工具_第15张图片

 

 

4 项目引用另一个项目

  1. 现在我们来学习一个maven项目引用另一个maven项目
  2. 首先创建一个maven简单项目,名为test2
  3. 然后test2项目里写个单元测试代码,调用test1的service代码
  4. 实现的关键只需要在test2中添加test1项目的依赖即可,注意下图红色框的内容

Maven项目管理工具_第16张图片

 

5 Maven的核心概念

5.1 坐标

  1. 在平面几何中坐标(x,y)可以标识平面中唯一的一点。maven中坐标就是为了定位一个唯一确定的jar包。
  2. Maven世界拥有大量构建,我们需要找一个用来唯一标识一个构建的统一规范,拥有了统一规范,就可以把查找工作交给机器
  3. Maven坐标主要组成(GAV) -确定一个jar在互联网位置

groupId:定义当前Maven组织名称

artifactId:定义实际项目名称

version:定义当前项目的当前版本

 

5.2 坐标的查找

  1. 访问http://www.mvnrepository.com或者http://search.maven.org/网站
  2. 假设搜索所spring core,如图然后点击sping,接点选择所需要的版本,就能看到所需要的jar包了

Maven项目管理工具_第17张图片

Maven项目管理工具_第18张图片

Maven项目管理工具_第19张图片

 

 

 

5.3 依赖管理

5.3.1 scope 依赖范围

Maven项目管理工具_第20张图片

其中依赖范围scope 用来控制依赖和编译,测试,运行的classpath的关系. 主要的是三种依赖关系如下:

  1. compile: 默认编译依赖范围。对于编译,测试,运行三种classpath都有效
  2. test:测试依赖范围。只对于测试classpath有效
  3. provided:已提供依赖范围。对于编译,测试的classpath都有效,但对于运行无效。因为由容器已经提供,例如servlet-api
  4. runtime:运行时提供。例如:jdbc驱动

 

5.3.2依赖传递

  1. 直接依赖和间接依赖
  2. test2 依赖 test1,test3依赖test2
  3. test2 直接依赖 test1,test3间接依赖test1

Maven项目管理工具_第21张图片

Maven项目管理工具_第22张图片

  1. 当第二依赖的范围是compile的时候,依赖可以传递
  2. 当第二直接依赖的范围是test的时候,依赖不会得以传递
  3. provided和runtime后面有遇到再讲,一般很少用,可以不用掌握。

 

5.3.3依赖冲突

  1. 假如test1使用junit4.10依赖,并且scope是compile,那test2,test3都可以使用test1的junit4.10,因为传递下来了
  2. 假如test2使用junit4.9依赖,那test3会使用【就近的一个依赖】,也就是使用junit4.9

 

5.3.4可选依赖

  1. true/false 是否可选,也可以理解为是否向下传递。
  2. 在依赖中添加optional选项决定此依赖是否向下传递,如果true则不传递,如果是false就传递,默认为false

Maven项目管理工具_第23张图片

 

5.3.5 排除依赖

  1. exclusions可用于排除依赖,注意exclusions是写在dependency

Maven项目管理工具_第24张图片

 

5.4 生命周期【了解】

  1. Maven生命周期就是为了对所有的构建过程进行抽象和统一
  2. 包括项目清理初始化、编译、打包、测试、部署等几乎所有构建步骤。
  3. 生命周期可以理解为构建工程的步骤。

 

在Maven中有三套相互独立的生命周期,请注意这里说的是“三套”,而且“相互独立”,这三套生命周期分别是:

  1. Clean Lifecycle: 在进行真正的构建之前进行一些清理工作。
  2. Default Lifecycle: 构建的核心部分,编译,测试,打包,部署等等。
  3. Site Lifecycle: 生成项目报告,站点,发布站点。

 

5.4.1 Clean生命周期:清理项目

Clean生命周期一共包含了三个阶段:

pre-clean 执行一些需要在clean之前完成的工作

clean 移除所有上一次构建生成的文件

post-clean 执行一些需要在clean之后立刻完成的工作

 

  1. 也就是说,mvn clean 等同于 mvn pre-clean clean
  2. 如果我们运行 mvn post-clean ,那么 pre-clean,clean 都会被运行。
  3. 这是Maven很重要的一个规则,可以大大简化命令行的输入。

 

5.4.2 Default生命周期:构造项目

  1. Default生命周期是Maven生命周期中最重要的一个,绝大部分工作都发生在这个生命周期中。这里,只解释一些比较重要和常用的阶段

validate

generate-sources

process-sources

generate-resources

process-resources 复制并处理资源文件,至目标目录,准备打包。

compile 编译项目的源代码。

process-classes

generate-test-sources

process-test-sources

generate-test-resources

process-test-resources 复制并处理资源文件,至目标测试目录。

test-compile 编译测试源代码。

process-test-classes

test 使用合适的单元测试框架运行测试。这些测试代码不会被打包或部署。

prepare-package

package 接受编译好的代码,打包成可发布的格式,如 JAR 。

pre-integration-test

integration-test

post-integration-test

verify

install 将包安装至本地仓库,以让其它项目依赖。

deploy 将最终的包复制到远程的仓库,以让其它开发人员与项目共享

  1. 运行任何一个阶段的时候,它前面的所有阶段都会被运行
  2. 这也就是为什么我们运行mvn install 的时候,代码会被编译,测试,打包,安装到本地仓库
  3. 此外,Maven的插件机制是完全依赖Maven的生命周期的,因此理解生命周期至关重要。

 

5.4.3 Sit生命周期:生成项目站点

  1. 这里经常用到的是site阶段和site-deploy阶段,用以生成和发布Maven站点,这可是Maven相当强大的功能
  2. Manager比较喜欢,文档及统计数据自动生成,很好看。我们就不用学,以后自己研究

pre-site 执行一些需要在生成站点文档之前完成的工作

site 生成项目的站点文档

post-site 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备

site-deploy 将生成的站点文档部署到特定的服务器上

 

 

6 Maven插件

  1. 可以通过pom.xml配置插件来更改项目编译compile的jdk版本

6.1 compile插件

  1. 如图:

Maven项目管理工具_第25张图片

代码

<build>

    <plugins>

       <plugin>

           <groupId>org.apache.maven.pluginsgroupId>

           <artifactId>maven-compiler-pluginartifactId>

           <configuration>

              <source>1.8source>

              <target>1.8target>

              <encoding>UTF-8encoding>

           configuration>

       plugin>

    plugins>

  build>

 

7 创建web的maven项目

7.1创建步骤如图

  1. 跟前面创建maven简单项目一样,只不过到了下面截图步骤时,要在packaging改成war

Maven项目管理工具_第26张图片

  1. maven的web项目目录结构比简单项目多了个webapp目录
  2. 我们需要在webapp项目中添加WEB-INF目录和web.xml文件

Maven项目管理工具_第27张图片

7.2配置tomcat插件跑web项目

tomcat:run

  1. 直接在运行配置中配置一个tomcat:run,默认跑的是tomcat 6.0,如图
  2. Tomcat6与jdk1.8不兼容,在jre改成1.7

Maven项目管理工具_第28张图片

 

tomcat7:run

  1. 需要先在pom.xml配置tomcat7的插件,然后运行配置中配置tomcat7:run

<build>

       <plugins>

           <plugin>

             

              <groupId>org.apache.tomcat.mavengroupId>

              <artifactId>tomcat7-maven-pluginartifactId>

              <configuration>

                  <port>8080port>

                  <path>/path>

              configuration>

           plugin>

       plugins>

build>

 

 

本地tomcat运行

pom.xml

<build>

       <plugins>

           <plugin>

              <groupId>org.codehaus.cargogroupId>

               <artifactId>cargo-maven2-pluginartifactId>

              <version>1.2.4version>

              <configuration>

                  <container>

                     <containerId>tomcat7xcontainerId>

                     <home>C:\Users\guoyongfeng\apache-tomcat-7.0.77home>

                  container>

                  <configuration>

                     <type>existingtype>

                     <home>C:\Users\guoyongfeng\apache-tomcat-7.0.77home>

                     <properties> 

                      <cargo.servlet.port>9234cargo.servlet.port> 

                      properties> 

                  configuration>

              configuration>

           plugin>

       plugins>

    build>

run config 运行配置,start前需要install

 

 

7.3配置jetty插件跑web项目

Pom.xml

<build>

       <finalName>test4finalName>

       <plugins>

           <plugin>

              <groupId>org.mortbay.jettygroupId>

              <artifactId>maven-jetty-pluginartifactId>

              <version>6.1.26version>

              <configuration>

                  <scanIntervalSeconds>10scanIntervalSeconds>

                  <webApp>${basedir}/target/test4webApp>

                  <webAppConfig>

                    

                     <contextPath>/contextPath>

                  webAppConfig>

                  <connectors>

                     <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">

                         <port>8888port>

                         <headerBufferSize>16192headerBufferSize>

                     connector>

                  connectors>

                configuration>

            plugin>

       plugins>

    build>

Run configrations

Maven项目管理工具_第29张图片

 

7.4 也可以直接run as 到tomcat中

8 继承

  1. 继承是为了消除重复,可以把很多相同的配置提取出来。例如:grouptId,version等

创建父工程

Maven项目管理工具_第30张图片

 

创建子工程

  1. 配置Parent的GAV
  2. 然后在父工程中添加的依赖,子工程可以直接继承使用

Maven项目管理工具_第31张图片

 

父工程统一管理依赖

  1. 在父工程中通过配置dependencies依赖,子工程可以直接继承使用,如下图

Maven项目管理工具_第32张图片

  1. 在父工程中通过配置dependencyManagement管理依赖的版本号
  2. 注意:此处只是定义依赖jar包的版本号,并不实际依赖。如果子工程中需要依赖jar包还需要添加dependency节点。

Maven项目管理工具_第33张图片

 

父工程中版本号提取

  1. 当父工程中定义的jar包越来越多,找起来越来越麻烦,所以可以把版本号提取成一个属性集中管理。
  2. 在父工程的pom.xml中配置一个properties标签,里面的标签自己自定义即可

Maven项目管理工具_第34张图片

 

  1. 聚合

聚合一般是一个工程拆分成多个模块开发,每个模块是一个独立的工程,但是要是运行时必须把所有模块聚合到一起才是一个完整的工程,此时可以使用maven的聚合工程。

例如电商项目中,包括商品模块、订单模块、用户模块等。就可以对不同的模块单独创建工程,最终在打包时,将不同的模块聚合到一起。

 

例如同一个项目中的表现层、业务层、持久层,也可以分层创建不同的工程,最后打包运行时,再聚合到一起。

9.1创建聚合项目

  1. 聚合模块的创建的packagin也是使用pom,GroupId和ArtifaceID根据项目来写,假如我有个淘宝电商项目

创建时,聚合项目的packaging一定要用pom,配置如图

Maven项目管理工具_第35张图片

在pom.xml配置指定版本的编译器

<build>

      <plugins>

         <plugin>

            <groupId>org.apache.maven.pluginsgroupId>

            <artifactId>maven-compiler-pluginartifactId>

            <configuration>

                <source>1.8source>

                <target>1.8target>

                <encoding>UTF-8encoding>

            configuration>

         plugin>

      plugins>

   build>

 

9.2创建Dao模块

创建模块时,要使用Maven Module

Maven项目管理工具_第36张图片

注意下面红色框框下的Parent Project要选我们写的聚合项目Platform

Maven项目管理工具_第37张图片

 

9.3创建Service模块

  1. 与dao创建方式相同

9.4创建web模块

  1. 这是要注意packaging要先war,代表是一个web项目
  2. 这里取名为taobao-backoffice,意为后台管理

 

9.5聚合项目结构如图

Maven项目管理工具_第38张图片

 

9.6 运行backoffic web工程

  1. 在backoffice的pom.xml中配置tomcat插件即可,然后配置run configurations的tomcat7:run

<build>

       <plugins>

           <plugin>

             

              <groupId>org.apache.tomcat.mavengroupId>

              <artifactId>tomcat7-maven-pluginartifactId>

              <configuration>

                  <port>8080port>

                  <path>/path>

              configuration>

           plugin>

       plugins>

build>

 

 

9.7 模块引用

如果一个模块要引用另一个模块,如backoffice要引用service,只需要添加依赖即可,如图

Maven项目管理工具_第39张图片

 

9.8创建表实体模块

其实在开发中,还会把表实体也抽取一个模块出来,如图

Maven项目管理工具_第40张图片

  1. 一般会在dao中引用entity模块
  2. service中引用dao模块

 

9.9如何发布聚合项目

  1. 只需要把backoffice 项目install下,在他的targit目录下,把.war包丢进服务器即可,如图

Maven项目管理工具_第41张图片

看下模块结构的结果,使用360打开war包,可见其它的jar所导入到了web的lib中了,这是

Maven自动导入的

Maven项目管理工具_第42张图片

 

10.1什么是仓库

  1. 用来统一存储所有Maven共享构建的位置就是仓库。
  2. 根据Maven坐标GAV定义每个构建在仓库中唯一存储路径大致为

groupId/artifactId/version/artifactId-version.packaging

Maven项目管理工具_第43张图片

Maven项目管理工具_第44张图片

 

 

10.2仓库的分类

1、本地仓库

~/.m2/repository每个用户只有一个本地仓库

2、远程仓库

  1. 中央仓库:Maven默认的远程仓库,不包含版权资源 http://repo1.maven.org/maven2
  2. 但是中央仓库地址一般都下载比较慢时,可以换成阿里云的中央仓库
  3. http://maven.aliyun.com/nexus/content/repositories/central/
  4. 也可以自己抢建一个仓库服务器来下载依赖
  5. 私服:是一种特殊的远程仓库,它是架设在局域网内的仓库

 

Maven项目管理工具_第45张图片

 

nexus就是用来创建maven的私服的,也就是提高依赖的下载速度,其实我们用阿里云的私服就好了,就不要折腾了。我是一条咸鱼

11.Maven的配置文件

  1. maven的用户配置文件有两种方式,一种是全局配置文件,一种是用户配置文件
  2. 本人很少用,直接用全局

 

案例:使用用户配置文件

  1. 根据下面的截图创建目录,用于放置依赖的存储路径

 

  1. 然后从全局中复制一个settings.xml到用户的.m2目录中
  2. 然后编辑setting.xml文件,配置localRepository为新创建的仓库路径

 

 

在偏好设置中,配置user settings选向为用户目录的settings.xml

以后所有的maven项目的依赖都会下载到c:\test\m2\repository

 

注意:

用户级别的仓库在全局配置中一旦设置,全局配置将不再生效,转用用户所设置的仓库

 

 

12. 整合springmvc

Maven项目管理工具_第46张图片

<dependency>

                 <groupId>org.springframeworkgroupId>

                 <artifactId>spring-beansartifactId>

                 <version>${spring.version}version>

           dependency>

           <dependency>

                 <groupId>org.springframeworkgroupId>

                 <artifactId>spring-contextartifactId>

                 <version>${spring.version}version>

           dependency>

           <dependency>

                 <groupId>org.springframeworkgroupId>

                 <artifactId>spring-coreartifactId>

                 <version>${spring.version}version>

           dependency>

           <dependency>

                 <groupId>org.springframeworkgroupId>

                 <artifactId>spring-expressionartifactId>

                 <version>${spring.version}version>

           dependency>

           <dependency>

                 <groupId>org.springframeworkgroupId>

                 <artifactId>spring-aopartifactId>

                 <version>${spring.version}version>

           dependency>

           <dependency>

                 <groupId>org.springframeworkgroupId>

                 <artifactId>spring-aspectsartifactId>

                 <version>${spring.version}version>

           dependency>

           <dependency>

                 <groupId>org.springframeworkgroupId>

                 <artifactId>spring-webmvcartifactId>

                 <version>${spring.version}version>

           dependency>

           <dependency>

                 <groupId>org.springframeworkgroupId>

                 <artifactId>spring-webartifactId>

                 <version>${spring.version}version>

           dependency>

           <dependency>

                 <groupId>aopalliancegroupId>

                 <artifactId>aopallianceartifactId>

                 <version>1.0version>

           dependency>

 

你可能感兴趣的:(Maven项目管理工具)