Maven简介

maven是什么

Maven本质是一个项目管理工具, 将项目开发和管理过程抽象成一个项目对象模型(Project Object Model, 即POM).

Maven工具本身的概念并不包括pom.xml和maven仓库.

maven的作用

  • 项目构建: 提供标准的, 跨平台的自动化项目构建方式
  • 依赖管理: 避免资源间的版本冲突问题
  • 统一开发结构: 提供标准的, 统一的项目结构

Maven配置文件

配置文件==setting.xml==

<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.2.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.2.0
          https://maven.apache.org/xsd/settings-1.2.0.xsd">
    <!--配置本地仓库-->
    <localRepository>D:\MavenRepository</localRepository>

    <pluginGroups>
    </pluginGroups>

    <proxies>
    </proxies>


    <servers>
    </servers>


    <mirrors>
        <!--配置central仓库的镜像-->
        <mirror>
            <id>aliyun</id>
            <mirrorOf>central</mirrorOf>
            <name>阿里云公共仓库</name>
            <url>https://maven.aliyun.com/repository/public</url>
        </mirror>

    </mirrors>

    <profiles>
        <profile>
            <id>jdk-1.8</id>
            <activation>
                <activeByDefault>true</activeByDefault>
                <jdk>1.8</jdk>
            </activation>
            <properties>
                <maven.compiler.source>1.8</maven.compiler.source>
                <maven.compiler.target>1.8</maven.compiler.target>
                <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
            </properties>
        </profile>
    </profiles>
</settings>

Maven插件与命令(手工方式)

  • maven compile: 将项目编译, 放入到生成的==target文件夹==中
  • maven clean: 清除之前生成的==target文件夹==
  • maven package: 生成jar包或war包
  • maven install: 将生成的jar包放入到本地仓库中, 根据定义的maven坐标决定存放的位置

IDEA生成Maven项目

依赖管理

依赖传递

如果在同一个工程下, 模块之间相互引用, 只需要将

<groupId>com.example</groupId>
<artifactId>xSpringBoot</artifactId>
<version>0.0.1-SNAPSHOT</version>

当作另一个项目的maven坐标使用即可

依赖冲突

  • 路径优先: 引入的依赖越靠近当前项目优先级越高
  • 声明优先

可选依赖(不透明)

对外隐藏项目中使用了哪些依赖, 使用<options>true</options>标识

排除依赖(不需要)

去除掉传递过来的依赖, 使用<exlusions></exclusion>标识

依赖范围

作用范围<scope>

  • 主程序范围(main文件夹)
  • 测试范围(test文件夹)
  • 是否参与打包(maven packge指令范围)
scope 主代码(main) 测试代码(test) 打包(maven package)
compile(默认值) y y y
test y
provided y y
runtime y

用途

  • test范围: 测试代码, 例如junit, 不会出现在主程序中, 也不需要打包
  • provided范围: 对于服务器本身已经存在的依赖, 这些依赖不能够打包, 否则和服务器提供的依赖之间产生依赖冲突并覆盖服务器提供的那个依赖.
  • runtime范围: 用于在配置文件中使用到, 但主代码和测试代码中均不会使用到的类. 例如数据库驱动等.

生命周期与插件


   转载规则


《》 熊水斌 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
Linux系统配置网络配置基础知识桥接模式 可以访问外网, 和其它主机通信 Windows系统和虚拟的Linux系统都会各自占用一个ip地址, 对于机器数量多的网段可能造成ip冲突 NAT模式 网络地址转换方式, Windows系统中会存
2022-11-11
下一篇 
Next主题踩坑优化对于Typora上编辑的markdown文档, 直接使用Next主题会有导致一些问题: Latex公式不能够正常显示 mermaid绘制的图形不能够正常显示 高亮效果不能够正常显示 术语 站点配置文件config
2022-11-11
  目录