Maven入门详解与安装配置

2023-10-27

Maven:

Maven出现前的问题:

假设你现在做了一个项目,项目中肯定要用到一些jar包,比如说mybatis,log4j,JUnit等,除了这些之外,你有可能用到你的同事开发的其他的东西,比如说别人做了一个财务模块或做了一个结算的模块,你在这里边有可能要用到这些东西。假如有一天你们的项目中mybatis进行了一个升级,但是它内部使用的JUnit没有升级,你升级以后的mybatis假如要用5.0的JUnit,而你项目中目前用的是4.0的,会不会冲突?必然会出问题!这个时候管理起来会比较麻烦,你需要各种调整。更有甚者,假如同事做的这些东西升级了但又没有通知你,这个时候,就会出现几种严重的问题:

  1. jar包不统一,jar不兼容
  2. 工程升级维护过程操作繁琐

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

Maven通过加载pom.xml这个配置文件就可以知道我们项目的相关信息,如果我们做8个项目,对应的是1个文件,还是8个文件?肯定是8个!

Maven是如何帮我们进行项目资源管理的呢?

  • 通过依赖管理
  • 所谓依赖管理就是maven对项目所有依赖资源的一种管理,它和项目之间是一种双向关系,当我们做项目的时候maven的依赖管理可以帮助你去管理你所需要的其他资源,当其他的项目需要依赖我们项目的时候,maven也会把我们的项目当作一种资源去进行管理,这就是一种双向关系。

Maven的依赖管理资源存在哪儿呢?

  • 本地仓库私服、中央仓库
  • 本地仓库顾名思义就是存储在本地的一种资源仓库,如果本地仓库中没有相关资源,可以去私服上获取,私服也是一个资源仓库,只不过不在本地,是一种远程仓库,如果私服上也没有相关资源,可以去中央仓库去获取,中央仓库也是一种远程仓库。
  • Maven除了帮我们管理项目资源之外还能帮助我们对项目进行构建,管理项目的整个生命周期,当然它的这些功能需要使用一些相关的插件来完成,当然整个生命周期过程中插件是需要配合使用的,单独一个无法完成完整的生命周期。

Maven的作用:

  1. 项目构建:提供标准的,跨平台的自动化构建项目的方式
  2. 依赖管理:方便快捷的管理项目依赖的资源(jar包),避免资源间的版本冲突等问题
  3. 统一开发结构:提供标准的,统一的项目开发结构

在这里插入图片描述

各目录存放资源类型说明:

  • src/main/java:项目java源码
  • src/main/resources:项目的相关配置文件(比如mybatis配置,xml映射配置,自定义配置文件等)
  • src/main/webapp:web资源(比如html,css,js等)
  • src/test/java:测试代码
  • src/test/resources:测试相关配置文件
  • src/pom.xml:项目pom文件

Maven环境搭建:

maven的官网:http://maven.apache.org/
官方下载地址:http://maven.apache.org/download.cgi

maven各目录结构说明:

  • bin:可执行程序目录
  • boot:maven自身的启动加载器
  • conf:maven配置文件的存放目录
  • lib:maven运行所需库的存放目录
Win系统环境配置:
  1. 我的电脑-------->属性--------->高级系统设置---------->新建系统变量MAVEN_HOME
    在这里插入图片描述
    新建系统环境变量MAVEN_HOME然后输入maven所在的路径
    在这里插入图片描述

系统变量值就是maven软件的根目录

  1. 环境变量配置好之后需要测试环境配置结果,在DOS命令窗口下输入以下命令查看输出,如果能够看到输出的maven的版本信息代表配置成功
mvn -v
MacOs系统配置:

官网下载:https://maven.apache.org/download.cgi

  1. 下载好将里面的apache-maven-3.6.1-bin.tar.gz解压到指定目录
  2. 找个方便的层级不深的目录新建文件夹,里面创建一个repository文件夹用作本地仓库,再把maven里conf下的settings.xml拷贝过来
  3. 然后编辑conf下的settings.xml配置文件(两个配置文件要一致),添加本地仓库和阿里镜像,放在<mirrors>里,本地仓库的随便放

全局settings与局部settings:

  • 全局settings:当前计算机中Maven公共配置
  • 局部settings:当前用户的配置(本地仓库就是局部的)

把settings文件里默认加的mirror标签注释掉,换成下面的阿里云的镜像在国内使用会快一点
在这里插入图片描述
换成下面这个

   <!-- 配置阿里云镜像 -->
   <mirrors>
    	<mirror>
        	<id>nexus-aliyun</id>
        	<mirrorOf>central</mirrorOf>
        	<name>Nexus aliyun</name>
        	<url>http://maven.aliyun.com/nexus/content/groups/public</url>
   		</mirror>
    </mirrors>

    <!-- 本地仓库 -->
    <localRepository>这里写你的本地仓库路径,例:/Users/itzhuzhu/Desktop/Java/maven/repository</localRepository>
  1. 打开终端输入vim ~/.bash_profile添加maven路径信息,最后面两行就是
# maven配置
export MAVEN_HOME=/Users/itzhuzhu/Desktop/Java/maven/apache-maven-3.8.4
export PATH=$PATH:$MAVEN_HOME/bin
  1. 退出以后执行source .bash_profile刷新一下,然后输入mvn -v显示下面这样的就是配置成功
itzhuzhu@itzhuzhudeMacBook-Pro ~ % source .bash_profile

itzhuzhu@itzhuzhudeMacBook-Pro ~ % mvn -v
Apache Maven 3.8.4 (9b656c72d54e5bacbed989b64718c159fe39b537)
Maven home: /Users/itzhuzhu/Desktop/Java/maven/apache-maven-3.8.4
Java version: 11.0.13, vendor: Oracle Corporation, runtime: /Library/Java/JavaVirtualMachines/jdk-11.0.13.jdk/Contents/Home
Default locale: zh_CN_#Hans, platform encoding: UTF-8
OS name: "mac os x", version: "10.16", arch: "x86_64", family: "mac"
仓库:
  • 仓库:用于存储资源,主要是各种jar包
  • 中央仓库:maven团队自身维护的仓库,里面所有的jar包都是开源的
  • 私服:各公司/部门等小范围内存储资源的仓库,私服也可以从中央仓库获取资源
    • 私服的作用:
    1. 保存具有版权的资源,包含购买或自主研发的jar
    2. 解决远程访问中中央仓库速度慢的问题
    3. 一定范围内共享资源,能做到仅对内不对外开放
    4. 本地获取私服的,私服有了就直接返回,没有的话才去中央仓库获取
  • 本地仓库:开发者自己电脑上存储资源的仓库,也可从远程仓库获取资源

在这里插入图片描述

坐标:

坐标:maven中的坐标用于描述仓库中资源的位置
https://repo1.maven.org/maven2/
maven坐标的作用:

使用唯一标识,唯一性定义资源位置,通过该标识可以将资源的识别与下载工作交由机器完成。

maven坐标的主要组成如下:

  • groupId:定义当前资源隶属组织名称(通常是域名反写,如:org.mybatis;com.itheima)

  • artifactId:定义当前资源的名称(通常是项目或模块名称,如:crm,sms)

  • version:定义当前资源的版本号

  • packaging:定义资源的打包方式,取值一般有如下三种

    1. jar:该资源打成jar包,默认是jar
    2. war:该资源打成war包
    3. pom:该资源是一个父资源(表明使用maven分模块管理),打包时只生成一个pom.xml不生成jar或其他包结构

如果要查询maven某一个资源的坐标,可以去maven的仓库进行查询,https://mvnrepository.com/,在该网站中可直接搜索想要的资源,然后就能得到该资源的坐标

maven构建命令:

maven的构建命令以mvn开头,后面添加功能参数,可以一次性执行多个命令,用空格分离,这些在idea不需要手动。

mvn compile:编译

  • 编译完成后在项目project-java下多了一个目录target,在这个目录下就存放的是maven编译好的一些东西和字节码文件

mvn clean:清理

  • 需要删除这些文件执行mvn clean命令即可,清理掉后target目录也就消失了

mvn test:测试

  • 其中产生的test-classes就是测试代码的字节码文件,surefire-reports是它产生的测试报告

mvn package:打包

  • 执行测试包中的测试程序,只需执行mvn test命令即可

mvn install:安装到本地仓库

  • 输出会发现mvn install命令执行的时候也会将前面的命令都执行一遍
  • maven是按照groupId/artifactId/version的结构在本地仓库进行存储
idea配置maven:
  1. 新建java项目选择maven
    在这里插入图片描述

  2. 新建web项目选择这个
    在这里插入图片描述

  3. 打开idea的设置搜索maven,然后修改下面三个地址就可以了
    在这里插入图片描述

  4. 创建好了以后检查maven工程的格式和依赖
    在这里插入图片描述

pom解析:

<?xml version="1.0" encoding="UTF-8"?>

<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/maven-v4_0_0.xsd">
    <!--指定pom模型的版本-->
    <modelVersion>4.0.0</modelVersion>
    <!--打包方式,web打wer包,java打jar包-->
    <packaging>war</packaging>

    <name>untitled2</name>
    <!--组织名-->
    <groupId>org.example</groupId>
    <!--项目名-->
    <artifactId>untitled2</artifactId>
    <!--版本-->
    <version>1.0-SNAPSHOT</version>

    <!--设置当前工程所有依赖-->
    <dependencies>
        <!--具体的依赖-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <!--构建-->
    <build>
        <!--设置插件-->
        <plugins>
            <!--具体的插件-->
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat-maven-plugin-it</artifactId>
                <version>2.1</version>
            </plugin>
        </plugins>
    </build>

</project>

检查maven是否可以下载:

经过我无数小时的报错我总结了报错原因大多数是以下几点:

  1. 标签的位置不对
  2. 使用的是远程仓库,导致下载不了,解决办法就是settings.xml加阿里镜像,要放在 标签里
  3. 配置本地仓库,两边的settings.xml文件要一致
  4. idea配置全局maven路径
  5. 在电脑上查找.m2的文件夹,直接给它全部干掉
  6. 再查找一下.lastUpdate这种文件,全部给它干掉

把下面常用的jar导入测试下载速度:

    <dependencies>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.12</version>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.0.3</version>
        </dependency>
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.2</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.12.0-rc1</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>2.12.0-rc1</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.12.0-rc1</version>
        </dependency>
        <dependency>
            <groupId>commons-dbcp</groupId>
            <artifactId>commons-dbcp</artifactId>
            <version>1.4</version>
        </dependency>
        <dependency>
            <groupId>commons-pool</groupId>
            <artifactId>commons-pool</artifactId>
            <version>1.6</version>
        </dependency>
        <dependency>
            <groupId>org.hamcrest</groupId>
            <artifactId>hamcrest</artifactId>
            <version>2.2</version>
        </dependency>
        <dependency>
            <groupId>org.hamcrest</groupId>
            <artifactId>hamcrest-all</artifactId>
            <version>1.3</version>
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.8.0</version>
        </dependency>

        <dependency>
            <groupId>org.hamcrest</groupId>
            <artifactId>hamcrest-library</artifactId>
            <version>2.2</version>
        </dependency>


        <dependency>
            <groupId>commons-beanutils</groupId>
            <artifactId>commons-beanutils</artifactId>
            <version>1.9.4</version>
        </dependency>

        <dependency>
            <groupId>c3p0</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.1.2</version>
        </dependency>
        <dependency>
            <groupId>com.jolbox</groupId>
            <artifactId>bonecp</artifactId>
            <version>0.8.0.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>net.sf.ehcache</groupId>
            <artifactId>ehcache-core</artifactId>
            <version>2.6.8</version>
        </dependency>
        <dependency>
            <groupId>org.quartz-scheduler</groupId>
            <artifactId>quartz</artifactId>
            <version>2.2.1</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.29</version>
        </dependency>
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <version>1.3.175</version>
        </dependency>
        <dependency>
            <groupId>org.hsqldb</groupId>
            <artifactId>hsqldb</artifactId>
            <version>2.3.2</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.jaxrs</groupId>
            <artifactId>jackson-jaxrs-xml-provider</artifactId>
            <version>2.3.1</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.1.39</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tiles</groupId>
            <artifactId>tiles-core</artifactId>
            <version>2.2.2</version>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>jcl-over-slf4j</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.apache.tiles</groupId>
            <artifactId>tiles-jsp</artifactId>
            <version>2.2.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tiles</groupId>
            <artifactId>tiles-servlet</artifactId>
            <version>2.2.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tiles</groupId>
            <artifactId>tiles-template</artifactId>
            <version>2.2.2</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.0.1</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>taglibs</groupId>
            <artifactId>standard</artifactId>
            <version>1.1.2</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>javax.servlet.jsp-api</artifactId>
            <version>2.3.1</version>
            <scope>provided</scope>
        </dependency>
        <!-- spring -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>4.0.2.RELEASE</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>4.0.2.RELEASE</version>
            <exclusions>
                <exclusion>
                    <groupId>commons-logging</groupId>
                    <artifactId>commons-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.0.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>4.0.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-expression</artifactId>
            <version>4.0.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>4.0.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aspects</artifactId>
            <version>4.0.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-messaging</artifactId>
            <version>4.0.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-instrument</artifactId>
            <version>4.0.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-instrument-tomcat</artifactId>
            <version>4.0.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-oxm</artifactId>
            <version>4.0.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>4.0.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>4.0.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>4.0.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jms</artifactId>
            <version>4.0.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>4.0.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>4.0.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc-portlet</artifactId>
            <version>4.0.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-websocket</artifactId>
            <version>4.0.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>aopalliance</groupId>
            <artifactId>aopalliance</artifactId>
            <version>1.0</version>
        </dependency>
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.7.4</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-config</artifactId>
            <version>3.2.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-web</artifactId>
            <version>3.2.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-taglibs</artifactId>
            <version>3.2.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.webflow</groupId>
            <artifactId>spring-webflow</artifactId>
            <version>2.3.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish.web</groupId>
            <artifactId>javax.el</artifactId>
            <version>2.2.3</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.2.5</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>1.2.2</version>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-asm</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-tx</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-jdbc</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-aop</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-core</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-context</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.6</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>jcl-over-slf4j</artifactId>
            <version>1.7.6</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>jul-to-slf4j</artifactId>
            <version>1.7.6</version>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
            <version>1.1.1</version>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.1.1</version>
        </dependency>
        <dependency>
            <groupId>org.logback-extensions</groupId>
            <artifactId>logback-ext-spring</artifactId>
            <version>0.1.1</version>
        </dependency>
    </dependencies>

Maven依赖管理:

依赖是指在当前项目中运行所需的jar,依赖配置的格式如下图

依赖传递:

依赖传递:

  1. 直接依赖:在当前项目中通过依赖配置建立的依赖关系
  2. 间接依赖:被依赖的资源如果依赖其他资源,则表明当前项目间接依赖其他资源
  3. 直接依赖和间接依赖其实也是一个相对关系

项目A想用项目B的东西,只需要把项目B的坐标加在pom文件里就可以了,如果项目B还用到了项目C的东西,在项目A也是可以用的

    <dependencies>
        <!--项目2的坐标-->
        <dependency>
            <groupId>org.example</groupId>
            <artifactId>maven01</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>

依赖传递的冲突问题:

在依赖传递过程中产生了冲突,我们有三种优先法则

  1. 路径优先:当依赖中出现相同资源时,层级越深,优先级越低,反之则越高
  2. 声明优先:当资源在相同层级被依赖时,配置顺序靠前的覆盖靠后的
  3. 特殊优先:当同级配置了相同资源的不同版本时,后配置的覆盖先配置的

可选依赖

optional标签,设为true,

作用:不想让别人知道自己用的maven用了什么就用可选

    <dependencies>
        <dependency>
            <groupId>org.example</groupId>
            <artifactId>maven01</artifactId>
            <version>1.0-SNAPSHOT</version>
            <optional>true</optional>
        </dependency>
    </dependencies>

排除依赖:

exclusions,复制要排除的资源信息
作用:排除依赖指主动断开依赖的资源,被排除的资源无需执行版本,依赖传过来不想用,就加这个

    <dependencies>
        <dependency>
            <!--项目2的文件-->
            <groupId>org.example</groupId>
            <artifactId>maven01</artifactId>
            <version>1.0-SNAPSHOT</version>
            <optional>true</optional>
            
            <exclusions>
                <exclusion>
                    <groupId>junit</groupId>
                    <artifactId>junit</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>
依赖范围:

依赖的jar默认情况可以在任何地方可用,可以通过scope标签设定其作用范围

这里的范围主要是指以下三种范围

  1. 主程序范围有效(src/main目录范围内)
  2. 测试程序范围内有效(src/test目录范围内)
  3. 是否参与打包(package指令范围内)

此外:scope标签的取值有四种:compile,test,provided,runtime

这四种取值与范围的对应情况如下:

在这里插入图片描述

依赖范围的传递性:

在这里插入图片描述

Maven生命周期:

maven的构建生命周期描述的是一次构建过程经历了多少个事件

生命周期是运行的阶段,插件是为了支持声明周期存在,构建过程就是靠这俩的

  1. clean:清理工作

pre-clean:执行一些在clean之前的工作

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

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

  1. default:核心工作,例如编译,测试,打包,部署等

执行test那就把test前面所有的都执行一遍,执行default就把default前面的都执行一遍,以此类推

在这里插入图片描述

  1. site:产生报告,发布站点等

pre-site:执行一些在生成站点文档之前的工作
site:生成项目的站点文档
post-site:执行一些在生成站点文档之后完成的工作,为部署做准备
site-deploy:将生成的站点文档部署到特定的服务器上

插件:
  • 插件与生命周期内的阶段绑定,在执行到对应生命周期时执行对应的插件
  • maven默认在各个生命周期上都绑定了预先设定的插件来完成相应功能
  • 插件还可以完成一些自定义功能

插件的配置方式如下:

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-source-plugin</artifactId>
                <version>2.4</version>
                <executions>
                    <execution>
                        <goals>
                        <!-- 可以打多个包 -->
                            <goal>jar</goal>
                            <goal>test-jar</goal>
                        </goals>
                        <phase>generate-test-resources</phase>
                    </execution>
                </executions>
            </plugin>
        </plugins>

在maven官网中有对插件的介绍:

http://maven.apache.org/plugins/index.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Maven入门详解与安装配置 的相关文章

  • JAVA获取IP地址、电脑Mac地址

    1 获取IP地址 注意 IP地址经过多次反向代理后会有多个IP值 其中第一个IP才是真实IP 所以不能通过 request getRemoteAddr 获取IP地址 如果使用了多级反向代理的话 X Forwarded For的值并不止一个
  • Maven的从入门到精通(完结篇)

    Maven的从入门到精通 完结篇 一 maven工程运行调试 1 1 端口占用处理 1 2 断点测试 二 总结 2 1 maven仓库 2 2 常用的maven命令 2 3 坐标定义 2 4 pom 基本配置 本文是Maven学习中的完结篇
  • System.arraycopy()详解

    java lang System arraycopy 方法复制指定的源数组的数组 在被copy的数组指定的位置开始 到目标数组的指定位置 具体方法如下 public static void arraycopy Object src int
  • 【SpringBoot】简介及传统的 Spring 框架:对比和分析

    哈喽 哈喽 大家好 我是你们的老朋友 保护小周 今天给大家带来的是 SpringBoot 的简介 SpringBoot 项目的创建 相较于 Spring 框架的优点 1 快速的集成框架 2 内置运行容器 快速的部署项目 3 摒弃繁琐的 xm
  • 零基础自学计算机方法大全

    欢迎入读 尚学堂给同学们带来全新的Java300集课程啦 java零基础小白自学Java必备优质教程 学习从来没有捷径 只有学成之后才会一切是那么简单 想要学会编程 一定要有坚定的信念 1 选方向 定目标 首先你需要做好功课 了解计算机的分
  • 【JavaEE初阶】第九节.多线程 (基础篇)定时器(案例三)

    作者简介 大家好 我是未央 博客首页 未央 303 系列专栏 JavaEE初阶 每日一句 人的一生 可以有所作为的时机只有一次 那就是现在 前言 一 定时器概述 二 定时器的实现 2 1 Java标准库 定时器的使用 2 2 自己模拟实现一
  • Redis(三)

    一 SpringBoot与Redis集成 1 引入依赖
  • 学完Web的你,赶快来看看SpringBoot吧!

    学完web的你 赶快看看SpringBoot吧 一 SpringBoot简介 1 1 原有Spring优缺点分析 1 1 1 Spring的优点分析 1 1 2 Spring的缺点分析 1 2 SpringBoot的概述 1 2 1 Spr
  • java基础知识

    java基础知识 java是一门编程语言 面向对象 是一门开源的计算机语言 曾用名Oak java市场需求 市面比较广 面向对象 可以开发的方面比较多 主要是是应用方面 android app 软件工具 微信小程序 大数据分析 当今社会上手
  • Cookie 和 Session 详解 及实现用户登陆功能

    Cookie是啥 浏览器提供的在客户端存储数据的一种机制 由于浏览器禁止了网页中的代码直接访问磁盘的文件因此要想再网页中实现数据的持久化存储 就可以使用Cookie这样的机制 Cookie 里面存什么 键值对结构 键和值都是程序猿自定义的
  • 在centos7中安装docker

    一 前置条件 64 bit 系统 kernel 3 10 CentOS 7 1 检查 使用 uname r 检查 kernel 版本 uname r 3 10 0 327 el7 x86 64 二 安装 yum安装方式 1 使用 sudo
  • SpringMVC关于get请求传参的问题

    在SpringMVC中 请求GetMapping注解的控制器方法 传参数时 如果直接使用get传递一个body参数过去 后端是不能正确接收的 这儿有一个篇为什么get请求不能正确接收body的解释 HTTP GET 请求可以有 body 吗
  • EL表达式向select中赋值

    在使用el表达式的时候 有时需要向select下拉菜单中赋值 可以使用三目运算法进行赋值
  • 多线程(九):JUC组件

    在来时juc组件前 我们先把上一章遗漏的部分给补上 synchronized 实现策略 锁升级 无锁 gt 偏向锁 gt 轻量级锁 gt 重量级锁 还有一个 锁消除 锁消除即删除不必要的加锁操作 JVM在运行时 对一些 在代码上要求同步 但
  • Spring学习笔记总结

    第一章 引言 1 EJB存在的问题 2 什么是Spring Spring是一个轻量级的JavaEE解决方案 整合众多优秀的设计模式 轻量级 1 对于运行环境是没有额外要求的 开源 tomcat resion jetty 收费 weblogi
  • MyBatis中Mapper接口和dao区别是什么?

    MyBatis中的mapper接口相当于以前的dao 但是区别在于 mapper仅仅是接口 我们不需要 提供实现类 public interface UserMapper 添加用户信息 int insertUser
  • J2EE常见面试题(一)

    StringBuilder和StringBuffer的区别 String 字符串常量 不可变 使用字符串拼接时是不同的2个空间 StringBuffer 字符串变量 可变 线程安全 字符串拼接直接在字符串后追加 StringBuilder
  • 【计算机毕业设计】北工国际健身俱乐部

    本系统为会员而设计制作北工国际健身俱乐部 旨在实现北工国际健身俱乐部智能化 现代化管理 本北工国际健身俱乐部管理自动化系统的开发和研制的最终目的是将北工国际健身俱乐部的运作模式从手工记录数据转变为网络信息查询管理 从而为现代管理人员的使用提
  • 【计算机毕业设计】毕业生就业管理微信小程序_lm9q0

    腾讯公司在2017年1月19日发布了一款不需要下载 不需要卸载 不需要存储的软件叫微信小程序 受到了很多人的喜欢 微信小程序自2017年发布至今 依托微信的社交属性和庞大的用户基数 已经渗透到生活的方方面面 1 微信小程序可以将基于微信平台
  • 【计算机毕业设计】宝鸡文理学院学生成绩动态追踪系统

    研究开发宝鸡文理学院学生成绩动态追踪系统的目的是让使用者可以更方便的将人 设备和场景更立体的连接在一起 能让用户以更科幻的方式使用产品 体验高科技时代带给人们的方便 同时也能让用户体会到与以往常规产品不同的体验风格 与安卓 iOS相比较起来

随机推荐

  • 麒麟系统里如何通过命令查询当前系统的具体信息

    命令 cat etc kyinfo 获取系统详细信息 包含架构 包含当前系统更新的时间等 cat etc productinfo 部分环境可能不能通过此命令获取信息 R系 nkvers 其他查询命令 操作系统版本查询命令 cat etc k
  • 前端性能优化认知

    前端性能优化认知 什么是前端性能优化 通常来讲 前端性能优化是指 从用户开始访问网站到整个页面完整地展现出来的过程中 通过各种优化策略和优化方法 让页面加载得更快 让用户的操作相应更及时 给用户更好的使用体验 优化是在做什么 如上图所示 优
  • ESP8266-01S烧录MQTT透传AT固件

    一 ESP8266 01S模块硬件连接 须在正常模式下 VCC GND RX TX 将IO0引脚接地 EN引脚接3 3V 总共6根线 连入USB TO TTL模块 将USB TO TTL模块插入电脑 二 固件与工具均可在安信可官网下载 也可
  • Element ui 中将switch开关自定义文字描述(ON/OFF)显示在开关里面

    Element ui 中将switch开关自定义文字描述 ON OFF 显示在开关里面 官网示例 可以看出文字描述在开关两边 看着很别扭 上代码
  • java中synchronized的三种写法详解

    预备知识 首先 我们得知道在java中存在三种变量 实例变量 存在于堆中 静态变量 存在于方法区中 局部变量 存在于栈中 然后 我们得明白 合适会发生高并发不安全 条件1 多线程并发 条件2 有共享数据 条件3 共享数据有修改的行为 具体不
  • python装饰器全解--包含实现原理及应用场景

    装饰器是Python的一大重点和难点 也是后续学习对类进行装饰以及元类的基础 其允许Python实现装饰器设计模式 可以在不改变某函数结构和调用方式基础之上 为其增加新的功能 并且最大化复用新的功能 装饰器在面向切面编程的场景中很有用 比如
  • MySQL复习总结

    1 char 和 varchar的区别 char的长度是不可变的 排除掉所存储的字符 其余位置使用空格进行填充 检索char类型的数据时会对尾部的空格进行删除 一个英文字符占用一个字节 一个汉字占用两个字节 varchar的长度是可变的 v
  • Android 3D滑动菜单完全解析,实现推拉门式的立体特效

    转载请注明出处 http blog csdn net guolin blog article details 10471245 在上一篇文章中 我们学习了Camera的基本用法 并借助它们编写了一个例子 实现了类似于API Demos里的图
  • Linux网络编程之System V消息队列

    System V消息队列函数 include
  • aloam学习笔记(一)

    开始学习aloam框架 记录一下最开始运行aloam中出现的各种问题以及解决方式 1 aloam地址 GitHub HKUST Aerial Robotics A LOAM Advanced implementation of LOAM 2
  • SQLServer 实验一 单表查询

    在订单数据库中 完成如下的查询 1 查询员工的姓名 职务和薪水 select employeeName headShip salary from Employee 2 查询名字中含有 有限 的客户名称和所在地 select Customer
  • stm32+esp8266上传实时温度到本地服务器

    在之前我们已经实现了esp8266和本地服务器的交互 并将数据写入到MySQL数据库中 但实际意义不大 我们需要实现将数据实时写入 所以需要添加传感器模块 并以单片机为主控处理数据 完成上传 这一次配置esp8266不再使用串口助手 而是将
  • java单例+观察者设计模式·简单实现订单生成与分发小案例--柚子真好吃

    java单例 观察者设计模式 简单实现订单生成与分发小案例 柚子真好吃 一 观察者模式介绍 二 观察者模式关键点 三 单例 观察者模式代码实现 一 观察者模式介绍 本项目采用单例 观察者设计模式 单例模式的使用这里不做过多说明 我之前的文章
  • STM32(一)准备开发环境CLion+CubeMX

    本篇内容 一 CLion和STM32CubeMX基础安装 二 安装OpenOCD 三 安装交叉编译工具链 四 配置CLion并点亮第一个LED灯 五 烧录程序 六 错误排查 本篇安装配置STM32的开发环境 使用的是稚晖君同款CLion S
  • 【C++ STL容器】:vector存放数据以及存放自定义的数据类型

    前言 时不可以苟遇 道不可以虚行 STL 中最常用的容器为 vector 暂且把它理解为我们之前学过的数组Array 一 创建一个vector容器 数组 添加头文件 include
  • react scss.modules中使用iconfont

    全局引入详见全局引入scss 全局的scss文件中引入iconfont css use font iconfont css 然后就可以正常使用啦
  • MySQL互为主从

    MySQL互为主从 Mysql A 192 168 189 140 Mysql B 192 168 189 141 在A B上操作 安装 root localhost yum y install mysql mysql server 修改配
  • RHCE(KVM——配置虚拟机网络连接)

    1 了解虚拟网络 主机硬件必须协助虚拟机 VM 连接到网络上的其他设备和位置 以下小节解释了虚拟机网络连接的机制 并描述了默认虚拟机网络设置 1 1 虚拟网络的工作方式 虚拟网络使用了虚拟网络交换机的概念 虚拟网络交换机是在主机机器中运行的
  • keil提示No Browse Information available in ‘..\OBJ\SPI‘解决方法

    1 No Browse Information available in OBJ SPI 解决方法 https blog csdn net frozennet article details 107213145
  • Maven入门详解与安装配置

    Maven Maven出现前的问题 假设你现在做了一个项目 项目中肯定要用到一些jar包 比如说mybatis log4j JUnit等 除了这些之外 你有可能用到你的同事开发的其他的东西 比如说别人做了一个财务模块或做了一个结算的模块 你