Maven

Maven简介

Maven是什么

  • Maven是一个项目管理和综合工具。Maven提供了开发人员构建一个完整的生命周期框架。开发团队可以自动完成项目的基础工具建设,Maven使用标准的目录结构和默认构建生命周期。
  • 在多个开发团队环境时,Maven可以设置按标准在非常短的时间里完成配置工作。由于大部分项目的设置都很简单,并且可重复使用,Maven让开发人员的工作更轻松,同时创建报表,检查,构建和测试自动化设置。

Maven历史

  • Maven最初设计,是以简化Jakarta Turbine项目的建设。在几个项目,每个项目包含了不同的Ant构建文件。 JAR检查到CVS。
  • Apache组织开发Maven可以建立多个项目,发布项目信息,项目部署,在几个项目中JAR文件提供团队合作和帮助。

Maven目标

  • Maven主要目标是提供给开发人员:
    • 项目是可重复使用,易维护,更容易理解的一个综合模型。
    • 插件或交互的工具,这种声明性的模式。
  • Maven项目的结构和内容在一个XML文件中声明,pom.xml 项目对象模型(POM),这是整个Maven系统的基本单元。
  • Apache Maven 是一种创新的软件项目管理工具,提供了一个项目对象模型(POM)文件的新概念来管理项目的构建,相关性和文档。最强大的功能就是能够自动下载项目依赖库。

Maven核心功能

  • 传统项目的问题:
    1. 需要把jar复制到项目中,繁琐
    2. 项目体积更大,不利于维护
    3. 不利于团队开发
  • Maven主要有两大核心功能:
    1. 依赖管理。(jar包的管理)
    2. 项目构建。(清理、编译、单元测试、打包、安装、部署、运行)

Maven入门

Maven程序目录结构

  • 约定大于配置:能使用约定好的方式,就不要配置。
  • 目录结构:
    maven_hello
    —-src
    ——-main
    ———-java
    ————-com
    —————–xxx
    ——————–Hello.java
    ———-resources
    ———-webapp (web项目)
    ——-test
    ———-java
    ————-com
    —————–xxx
    ——————-test
    ———————-HelloTest.java
    ———-resources
    —-pom.xml
  • 文件作用:
    • src/main/java:存放项目的.java文件
    • src/main/resources:存放项目资源文件。如配置文件
    • src/test/java:存放所有测试的.java文件.如Junit测试类
    • src/test/resources:测试资源文件
    • target:项目输出位置(可以自动生成)】
    • pom.xml(maven项目核心配置文件)

使用命令创建(了解)

  mvn archetype:generate -DgroupId=com.xxx.maven -DartifactId=maven02  -DinteractiveMode=false -DarchetypeCatalog=internal
  • 解释(按顺序)
    • (1)项目组的编号
    • (2)项目的名称
    • (3)交互模式(false使用默认的,true需要手动输入信息)
    • (4)使用maven内部骨架

Maven常见命令

  • 构建包括:清理、编译、测试、打包、安装、部署、运行等。这些过程都可以使用Maven命令来完成。
  • 每个maven命令都有相对于的插件来完成。

clean

  • mvn clean:清理(删除)编译的文件
  • 使用插件:maven-clean-plugin:2.5:clean

compile

  • mvn compile:编译主目录的文件
  • 使用插件:
    • maven-resources-plugin:2.6:resources
    • maven-compiler-plugin:3.1:compile

test

  • mvn test: 编译并运行test目录的代码
  • 使用插件:
    • maven-resources-plugin:2.6:resources
    • maven-compiler-plugin:3.1:compile
    • maven-resources-plugin:2.6:testResources
    • maven-compiler-plugin:3.1:testCompile
    • maven-surefire-plugin:2.12.4:test

package

  • mvn package:打包项目,jar包或war包
  • 使用插件:
    • maven-resources-plugin:2.6:resources
    • maven-compiler-plugin:3.1:compile
    • maven-resources-plugin:2.6:testResources
    • maven-compiler-plugin:3.1:testCompile
    • maven-surefire-plugin:2.12.4:test
    • maven-jar-plugin:2.4:jar

install

  • mvn install:安装到仓库
  • 使用插件:
    • maven-resources-plugin:2.6:resources
    • maven-compiler-plugin:3.1:compile
    • maven-resources-plugin:2.6:testResources
    • maven-compiler-plugin:3.1:testCompile
    • maven-surefire-plugin:2.12.4:test
    • maven-jar-plugin:2.4:jar
    • maven-install-plugin:2.4:install

其他命令

  • mvn deploy:部署,部署到私服
  • mvn tomcat:run:运行

Maven构建生命周期

  1. Clean:项目构建前的清理操作
  2. Default(Build): 核心生命周期核心过程:编译,测试,运行,打包等等
  3. Site:项目站点文档创建。
  4. 详细的生命周期,请移步【易百教程】

Maven POM文件

  • POM( Project Object Model,项目对象模型 ) 是 Maven 工程的基本工作单元,是一个XML文件,包含了项目的基本信息,用于描述项目如何构建,声明项目依赖,等等。
  • 执行任务或目标时,Maven 会在当前目录中查找 POM。它读取 POM,获取所需的配置信息,然后执行目标。
  • POM 中可以指定以下配置:
    • 项目依赖
    • 插件
    • 执行目标
    • 项目构建 profile
    • 项目版本
    • 项目开发者列表
    • 相关邮件列表信息
  • 所有 POM 文件都需要 project 元素和三个必需元素:groupId,artifactId,version。这个必须元素叫做坐标(GAV)
  • 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">
  
  <!-- 模型版本 -->
  <modelVersion>4.0.0</modelVersion>
  <!-- 公司或者组织的唯一标志,并且配置时生成的路径也是由此生成,
  如com.companyname.project-group,maven会将该项目打成的jar包放本地路径:/com/companyname/project-group -->
  <groupId>com.companyname.project-group</groupId>
  
  <!-- 项目的唯一ID,一个groupId下面可能多个项目,就是靠artifactId来区分的 -->
  <artifactId>project</artifactId>
  
  <!-- 版本号 SNAPSHOT 快照版 RELEASE 发布版-->
  <version>1.0-SNAPSHOT</version>
  
  <!--打包形式 例如jar、war、ear、pom-->
  <packaging>jar</packaging>
  </project>

Maven引入外部依赖

  • pom.xml 的 dependencies 列表列出了我们的项目需要构建的所有外部依赖项。
  • 在该网站上搜索需要的依赖:Maven官方网站
  • 代码示例:
  <dependencies>
      <!--坐标GAV-->
      <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <!-- 版本 -->
          <version>4.12</version>
          <!--依赖范围-->
          <scope>test</scope>
      </dependency>
  </dependencies>

如何把第三方jar包安装的本地仓库

  • 安装指定文件到本地仓库命令:
    • mvn install:install-file
    • -DgroupId= : 设置项目代码的包名(一般用组织名)
    • -DartifactId= : 设置项目名或模块名
    • -Dversion=1.0.0 : 版本号
    • -Dpackaging=jar : 什么类型的文件(jar包)
    • -Dfile= : 指定jar文件路径与文件名(同目录只需文件名)
  • 示例:安装ValidateCode.jar包(在该jar包所在文件中执行该命令)
mvn install:install-file -DgroupId=com.xxx -DartifactId=validatecode -Dversion=1.0.0 -Dpackaging=jar -Dfile=ValidateCode.jar

Scope

  • Scope:声明jar包的存活时间
  • 取值说明:
    1. provided:编译和测试时需要,打包和运行不需要。例如servlet-api、jsp-api
    2. compile:编译、测试、运行、打包需要 例如druid、dbutils、fileupload
    3. runtime:测试、运行、打包需要 例如mysql驱动
    4. test:测试。例如junit
    5. system:编译和测试时需要,显示引用,Maven不会检索

依赖范围详细介绍

  • A依赖B,需要在项目A的pom.xml文件中添加项目B的坐标,添加坐标时需要指定依赖范围,依赖范围包括:
    • (1)compile:编译范围, 编译范围的依赖会在编译,测试,运行,打包(war)都会使用依赖jar包
    • (2)provided:提供依赖,provided依赖在编译,测试时需要,运行,打包都不会包含。
    • (3)runtime:运行依赖,runtime依赖在运行、测试、打包的需要,但在编译的时候不需要,比如:jdbc的驱动包
    • (4)test:测试依赖,在编译和运行时不需要,他们只有在测试编译和测试运行时使用, 比如junit,也不会被打包
    • (5)system:系统依赖,system依赖与provided类似,但是你必须显示的提供一个对于本地系统中jar文件的路径,需要指定systemPath磁盘路径,system依赖不推荐使用。

表格展示

依赖范围 编译 测试 运行 打包(war) 例子
compile yes yes yes yes beanutils、fileupload
test no yes no no junit
provided yes yes no no serlvet-api、jsp-api
runtime no yes yes yes jdbc驱动
system yes yes no no 本地jar包。maven仓库之外的jar包
  • 注意:打包jar包时,不会包含任何依赖包的。
  • 默认依赖范围:compile
  • 依赖范围由强到弱的顺序是:compile–>provided–>runtime–>test

参考


转载请注明:Memory的博客 » 点击阅读原文

打赏一个呗

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦