Maven基础

1、maven是什么?

1.1、两大核心

1.2、Maven的标准工程目录结构

.工程名
|-- pom.xml(maven的核心配置文件)
|-- src
|	|-- main
|	|	|-- java(java源代码目录)
|	|	└-- resources(资源文件目录)
|	|-- test
|		└-- java(单元测试代码目录)
|-- target(输出目录,所有的输出物都存放在这个目录下)
    └--classes(编译后的class文件存放处)	

2、Maven配置

2.1、仓库类型

仓库类型 说明
本地仓库 当前使用的电脑上的仓库,每个人电脑上都有一个仓库,默认位置在 当前用户名\.m2\repository
私服仓库 公司内部搭建的 Maven 私服,处于局域网中,访问速度较快,这个仓库中存放的 jar 一般就是公司内部自己开发的 jar
中央仓库 有 Apache 团队来维护,包含了大部分的 jar(https://mvnrepository.com/),一般修改成国内的镜像仓库

Maven项目下载Jar的流程如下图

Maven查找jar.jpg

2.2、本地仓库配置

本地仓库默认位置在 当前用户名\.m2\repository,这个位置可以自定义,在 conf/settings.xml 中自定义本地仓库位置:

<settings>
    <localRepository>F:/repo/repository</localRepository>
</settings>

2.3、中央仓库配置

默认中央仓库下载较慢,这里改为阿里巴巴仓库地址,在标签中添加 mirror 子节点:

<mirror>
  <id>aliyunmaven</id>
  <mirrorOf>central</mirrorOf>
  <name>阿里云公共仓库</name>
  <url>https://repo1.maven.org/maven2/</url>
</mirror>

2.4、私服仓库配置

假设公司私服仓库地址是:https://repo.spring.io/ui/native/libs-milestone/,则配置如下:

<repositories>
        <repository>
            <id>spring</id>
            <url>https://repo.spring.io/ui/native/libs-milestone/</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
    </repositories>

    <pluginRepositories>
        <pluginRepository>
            <id>spring</id>
            <url>https://repo.spring.io/ui/native/libs-milestone/</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </pluginRepository>
    </pluginRepositories>

再有一个私服地址:http://repo.spring.io/plugins-release/时的配置如下:

<repositories>
        <repository>
            <id>spring</id>
            <url>https://repo.spring.io/ui/native/libs-milestone/</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
    	<repository>
            <id>spring-plugin</id>
            <url>http://repo.spring.io/plugins-release/</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
    </repositories>

    <pluginRepositories>
        <pluginRepository>
            <id>spring</id>
            <url>https://repo.spring.io/ui/native/libs-milestone/</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </pluginRepository>
        <pluginRepository>
            <id>spring-plugin</id>
            <url>http://repo.spring.io/plugins-release/</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </pluginRepository>
    </pluginRepositories>

3、maven的使用

3.1、常用maven命令

  • mvn clean:清理
  • mvn compile:编译主程序
  • mvn test-compile:编译测试程序
  • mvn test:执行测试
  • mvn package:打包
  • mvn install:安装
  • mvn deploy: 上传

4、依赖

4.1、依赖项目

  • 对于本地仓库中没有的会去中央仓库去查找maven坐标来获取jar包,获取到jar之后会下载到本地仓库

  • 对于中央仓库也找不到依赖的jar包的时候,就会编译失败了

    如果依赖的是自己或者团队开发的maven工程,需要先使用install命令把被依赖的maven工程的jar包导入到本地仓库中

4.2、依赖范围

	 <!--依赖举例--> 
	 <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <version>2.2.13.RELEASE</version>
      </dependency>

内就是依赖的范围,不指定则默认为scope

依赖范围 依赖传递 编译有效 测试有效 运行时有效 打包有效
complie
test × × × ×
runtime ×
provided × × ×
system × × ×
4.2.1、scope中import的作用

import:导入依赖范围。该范围的依赖只在dependencyManagement标签才有效。它的作用是将目标pom的dependencyManagement标签中的依赖,合并到当前pom的dependencyManagement标签内,供引用项目中使用。由于import依赖的特殊性,一般看到import范围时,就会存在pom,即指向打包类型为pom的模块。如上边依赖:

	  <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>2.2.13.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
4.2.2、optional的作用

optional是maven依赖jar时的一个选项,表示该依赖是可选的.不会被依赖传递

应用场景:项目A依赖项目B,项目B依赖项目C时

<!--项目B依赖项目C-->
<dependency>
  <groupId>learn</groupId>
  <artifactId>leann-C</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <optional>true</optional>
</dependency>

当项目B的true时, 项目A中如果没有显式的引入项目C, 则项目A不依赖项目C, 即项目A可以自己选择是否依赖项目C

posted on 2022-02-15 15:37  cxbks  阅读(103)  评论(0)    收藏  举报