Maven使用教程|青训营笔记

59 阅读4分钟

这是我参与「第四届青训营 」笔记创作活动的第8天。

随着java广泛应用,可使用的jar包越来越多,传统的jar包下载方式显得越来越繁琐,且不易管理。因此,Maven诞生了。

什么是Maven

简单来说,maven是一款服务于java平台的自动化构建工具。 构建定义:把动态的Web工程经过编译得到的编译结果部署到服务器上的整个过程。
下载官网: maven.apache.org/download.cg… 下载完成后需要把bin目录地址配置到系统环境变量。 且可以更该包下载源,替换成阿里云镜像网站:
找到配置文件,在安装目录的conf文件下可以找到settings文件。

 <!-- 阿里云仓库 -->
        <mirror>
            <id>alimaven</id>
            <mirrorOf>central</mirrorOf>
            <name>aliyun maven</name>
            <url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
        </mirror>

Maven常用命令

-v:查询Maven版本

本命令用于检查maven是否安装成功。 Maven安装完成之后,在命令行输入mvn -v,若出现maven信息,则说明安装成功。

compile:编译

将java源文件编译成class文件

test:测试项目

执行test目录下的测试用例

package:打包

将项目打成jar包

clean:删除target文件夹

install:安装

将当前项目放到Maven的本地仓库中。供其他项目使用

Maven仓库

Maven仓库用来存放Maven管理的所有Jar包。分为:本地仓库 和 中央仓库。

  • 本地仓库:Maven本地的Jar包仓库。
  • 中央仓库: Maven官方提供的远程仓库。 当项目编译时,Maven首先从本地仓库中寻找项目所需的Jar包,若本地仓库没有,再到Maven的中央仓库下载所需Jar包

坐标

在Maven中,坐标是Jar包的唯一标识,Maven通过坐标在仓库中找到项目所需的Jar包。 如下代码中,groupIdartifactId构成了一个Jar包的坐标。

<dependency>
   <groupId>cn.missbe.web.search</groupId>
   <artifactId>resource-search</artifactId>
   <packaging>jar</packaging>
   <version>1.0-SNAPSHOT</version>
</dependency>
  • groupId:所需Jar包的项目名
  • artifactId:所需Jar包的模块名
  • version:所需Jar包的版本号

pom.xml文件简单介绍

pom.xml文件为java项目配置Maven的管理文件,所有与Maven有关设置在此文件中定义。

根路径project

<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.0http://maven.apache.org/maven-v4_0_0.xsd">  

一些xml文件配置,主要是命名空间。

父项目

  <parent> 
    <!--被继承的父项目的构件标识符-->  
    <artifactId/>  
    <!--被继承的父项目的全球唯一标识符-->  
    <groupId/>  
    <!--被继承的父项目的版本-->  
    <version/> 
  </parent>  

springboot项目就是从父项目继承。

项目信息

  <modelVersion>4.0.0</modelVersion>  
  <groupId>cn.missbe.web</groupId>  
  <artifactId>search-resources</artifactId>  
  <packaging>war</packaging>  
  <version>1.0-SNAPSHOT</version>  
  <name>search-resources</name>  
  • modelVersion 声明项目描述符遵循哪一个POM模型版本。模型本身的版本很少改变,虽然如此, 但它仍然是必不可少的,这是为了当Maven引入了新的特性或者其他模型变更的时候,确保稳定性。
  • groupId 项目的全球唯一标识符,通常使用全限定的包名区分该项目和其他项目。并且构建时生成的路径也是由此生成, 如com.mycompany.app生成的相对路径为:/com/mycompany/app
  • artifactId 构件的标识符,它和group ID一起唯一标识一个构件。换句话说,你不能有两个不同的项目拥有同样的artifact ID和groupID;在某个特定的group ID下,artifact ID也必须是唯一的。构件是项目产生的或使用的一个东西。
  • packaging 项目产生的构件类型,例如jar、war、ear、pom。插件可以创建他们自己的构件类型,所以前面列的不是全部构件类型。
  • version 项目当前版本,格式为:主版本.次版本.增量版本-限定版本号
  • name 项目的名称, Maven产生的文档用

依赖配置

导入jar包主要修改属性

<dependencies> 
    <dependency> 
      <groupId>org.apache.maven</groupId>  
      <artifactId>maven-artifact</artifactId> 
      <version>3.8.1</version> 
      <type>jar</type>  
      <scope>test</scope>   
    </dependency> 
  </dependencies>  
  • version 依赖的版本号。 在Maven 2里, 也可以配置成版本号的范围。
  • type 依赖类型,默认类型是jar。它通常表示依赖的文件的扩展名,但也有例外 。一个类型可以被映射成另外一个扩展名或分类器。类型经常和使用的打包方式对应, 尽管这也有例外。一些类型的例子:jar,war,ejb-client和test-jar。 如果设置extensions为 true,就可以在 plugin里定义新的类型。
  • scope 依赖范围。在项目发布过程中,帮助决定哪些构件被包括进来。
    - compile :默认范围,用于编译
    - provided:类似于编译,但支持你期待jdk或者容器提供,类似于classpath
    - runtime: 在执行时需要使用
    - test: 用于test任务时使用
    - system: 需要外在提供相应的元素。通过systemPath来取得
    - systemPath: 仅用于范围为system。提供相应的路径
    - optional: 当项目自身被依赖时,标注依赖是否传递。用于连续依赖时使用

总结

Maven的出现,极大的简便了java项目导入包的操作,且更有利于管理。