一文带你了解maven基础和高级(不含私服)

maven是什么

  • 本质是一种项目管理工具,将开发者和管理过程抽象成一个对象模型(POM)
  • POM :项目对象模型
    在这里插入图片描述

Maven作用

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

在这里插入图片描述

Maven基础概念

仓库

  • 存储资源和jar包
  • 中央仓库存储着99%的资源,当你需要什么时本地仓库从远端中央仓库下载到本地仓库
  • 私服 :
    1. 大部分是公司内局域网之内访问,减少资源占用,访问速度快
    2. 具有版权的资源,包含自主研发的jar
    3. 仅对范围内共享,不对外开放
    在这里插入图片描述

坐标

  • Maven中描述仓库中资源的位置 http://mvnrepository.com/
  • Maven坐标主要组成
    1. groupId:定义当前Maven项目隶属于组织的名称(通常是域名反写)
    2. artifactId:定义当前Maven项目名称
    3. version:定义当前项目版本号
    4. packaging:定义该项目的打包方式

本地仓库配置

  • conf文件夹下面的setting文件

在这里插入图片描述

  • 镜像下载地址

在这里插入图片描述

  • 可以拥有自己的setting文件

手动构建自己的maven项目

  • maven构建命令使用mvn开头,后面添加功能参数,可以一次执行多个命令,使用空格分隔
    在这里插入图片描述

IDEA构建工程的几种方式

IDEA自动创建java项目

##
在这里插入图片描述

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>
<!--  打包方式-->
  <packaging>war</packaging>

<!--  组织id-->
  <name>web01</name>
<!--  -->
  <groupId>com.ssc</groupId>
<!--  项目名字-->
  <artifactId>web01</artifactId>
<!--  版本号-->
  <version>1.0-SNAPSHOT</version>
<!--依赖-->
  <dependencies>
<!--具体依赖-->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <build>
    <!--设置插件-->
    <plugins>
      <!--具体插件-->
      <plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat7-maven-plugin</artifactId>
        <version>2.1</version>
        <configuration>
          <port>80</port>
          <path>/</path>
        </configuration>
      </plugin>
    </plugins>
  </build>

</project>

依赖

依赖配置

<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
        
    </dependency>
</dependencies>

依赖传递

  • 直接依赖:当前项目通过以来配置建立连接关系的依赖
  • 被资源的资源如果依赖其他资源,当前项目间接依赖其他资源
  • 出现冲突:
    1. 路径优先:出现相同资源时,层级越深,优先级越低
    2. 申明优先:当资源在同层级依赖时,配置顺序考前的覆盖配置顺序靠后的
    3. 特殊优先:同级配置了相同资源的不同版本,后配置的覆盖先配置的

在这里插入图片描述

可选依赖

  • 被引入控制不被别人看到
<!--可选依赖 引入他时看不到这个-->
<optional>true</optional>

排除依赖

  • 引入者主动排除在外
<exclusions>
    <exclusion>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
    </exclusion>
</exclusions>

依赖范围

  • 依赖jar默认情况下可以在任何地方使用,可以通过scope标签配置
  • 作用范围:
    1. 主程序范围有效(main文件夹范围内)
    2. 测试程序范围有效(test文件夹范围内)
    3. 是否参与打包(package指令范围内)
<scope>test</scope>

在这里插入图片描述
在这里插入图片描述

依赖范围传递

  • 带有依赖范围的资源在进行传递时,作用范围将受到影响
    在这里插入图片描述

生命周期与插件

项目构建生命周期

  • Maven构建生命周期描述的是一次构建过程中经历了多少阶段

在这里插入图片描述

clean生命周期

  1. pre-clean 执行一些需要在clean之前完成的工作
  2. clean 移除所有上一次构建生成的文件
  3. post-clean 执行一些需要在clean之后完成的工作

default构建生命周期

在这里插入图片描述

插件

  • 插件与生命周期内的阶段进行绑定,在执行到对应生命周期时执行对应的插件
  • 默认maven在各个生命周期上绑定有预设的功能
  • 通过插件可以自定义其他功能
  • 结合上面的图片
<plugins>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-source-plugin</artifactId>
    <version>2.2.1</version>
    <executions>
      <execution>
        <goals>
<!--      对源码打包 -->
<!--      如果是test-jar对测试源码进行打包-->
<!--      可以同时写两个-->
          <goal>jar</goal>
          <goal>test-jar</goal>
        </goals>
<!--            对应的生命周期阶段执行-->
        <phase>generate-test-resources</phase>
      </execution>
    </executions>
  </plugin>
</plugins>

Maven高级

分模块开发与设计(重点)

  • 分模块的时候如果需要其他模块的数据时,只需要在pom文件中导入相关的坐标
    1. 在导入之后本地仓库内还没有相关的jar,所以需要在被引入的模块下面执行install
    2. 有一个小问题就是如果在导入坐标执行compile之后出现Failed to collect dependencies at com.itheima:ssm_pojo:jar:1.0-SNAPSHOT: Failed to read artifact descriptor for com.itheima:ssm_pojo:jar:1.0-SNAPSHOT: Could not find artifact com.itheima:springmvc_ssm:pom:1.0-SNAPSHOT那就要注意了,执行子模块的install之前需要先在父模块下面执行clean和install命令
    3. 保留下所有该模块的配置文件
  • 仅保留自己模块需要的功能类和配置文件
  • spring核心配置根据功能不同进行独立制作
  • 当前模块所依赖的模块通过坐标的形式加入当前的模块才可以使用
  • web.xml需要加载所有的spring核心配置文件

聚合(重点)

在这里插入图片描述

  • 新建一个module 只需要pom文件,在pom.xml中管理这几个模块
  • 顺序无论如何书写编译时都是一个顺序(依赖顺序和书写顺序无关)
  • package标签什么都不写默认就是jar包,聚合的时候标签内写成pom就可以了
    <!--定义该工程进行构建管理-->
    <packaging>pom</packaging>
    <!--管理工程列表-->
    <modules>
        <module>../../BaiduNetdiskDownload/黑马教程资料/第3阶段—Java开发框架/资料-Maven/day02资料/代码/项目拆分/springmvc_ssm/ssc_controller</module>
        <module>../../BaiduNetdiskDownload/黑马教程资料/第3阶段—Java开发框架/资料-Maven/day02资料/代码/项目拆分/springmvc_ssm/ssm_dao</module>
        <module>../../BaiduNetdiskDownload/黑马教程资料/第3阶段—Java开发框架/资料-Maven/day02资料/代码/项目拆分/springmvc_ssm/ssm_pojo</module>
        <module>../../BaiduNetdiskDownload/黑马教程资料/第3阶段—Java开发框架/资料-Maven/day02资料/代码/项目拆分/springmvc_ssm/ssc_service</module>
    </modules>

继承(重点)

在这里插入图片描述

  • 继承需要在聚合模块中的依赖标签中加入一个dependenciesManagement标签
  • 声明所有依赖并添加版本,子模块可以直接引入依赖不引入版本
  • 插件plugins也是在外层包裹一层pluginsManagement
<dependencyManagement>
	<dependencies>
		...
	</dependencies>
</dependencyManagement>

  <build>
    <pluginManagement>
    <!--设置插件-->
    <plugins>
      <!--具体的插件配置-->
      <plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat7-maven-plugin</artifactId>
        <version>2.1</version>
        <configuration>
          <port>80</port>
          <path>/</path>
        </configuration>
      </plugin>
    </plugins>
    </pluginManagement>
  </build>
  • 所有子模块需要定义它的父模块
<parent>
        <artifactId>springmvc_ssm</artifactId>
        <groupId>com.itheima</groupId>
        <version>1.0-SNAPSHOT</version>
        <relativePath>../pom.xml</relativePath>
    </parent>

可继承的属性

在这里插入图片描述

继承与聚合作用,相同点,不同点

作用

在这里插入图片描述

相同点

在这里插入图片描述

不同点

在这里插入图片描述

属性(重点)

  • 在pom.xml中插入properties标签里面定义自己的属性
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <spring.version>5.1.9.RELEASE</spring.version>
  </properties>
  • 内置属性
${basedir}
${version}
  • Setting属性: 获取Maven配置文件setting.xml中的标签属性,用于动态配置
${settings.localRepository}
  • java系统属性

  • 系统属性查询方式

mvn help:system

${user.home}

版本管理

  • SNAPSHOT 快照版本
  • RELESE 发布版本

版本号约定

在这里插入图片描述

资源配置

  • 抽取文件
<properties>
	抽取jdbc.url
	<jdbc.url>jdbc:mysql://localhost:3306/test</jdbc.url>
</properties>
<build>	
	配置资源文件对应的信息 使用了通配符
	<resources>
	  <resource>
	    <directory>${project.basedir}/src/main/resources</directory>
	    <filtering>true</filtering>
	  </resource>
	</resources>
	配置测试资源文件对应得信息
	<testResources>
      <testResource>
        <directory>${project.basedir}/src/test/resources</directory>
        <filtering>true</filtering>
      </testResource>
    </testResources>
</build>

多环境开发配置

  • 父模块的pom.xml
  <profiles>
<!--    定义生产环境-->
    <profile>
      <id>pro_env</id>
      <properties>
        <jdbc.url>jdbc:mysql://localhost:3307/test</jdbc.url>
      </properties>
<!--      设置默认启动-->
      <activation>
        <activeByDefault>true</activeByDefault>
      </activation>
    </profile>
    <profile>
      <id>dev_env</id>
      <properties>
        <jdbc.url>jdbc:mysql://localhost:3308/test</jdbc.url>
      </properties>
    </profile>
  </profiles>
  • maven命令加载指定环境

mvn 指令 -P 环境定义id
范例: mvn install -P pro_env

跳过测试 (了解)

第一种IDEA右侧直接点击设置

在这里插入图片描述

右侧Maven工具

在这里插入图片描述

在这里插入图片描述

使用配置跳过测试

<plugin>
	<artifactId>maven-surefire-plugin</artifactId>
	<version>2.22.1</version>
	<configuration>
		<skipTests>true</skipTests><!-- -->
		<includes> <!-- -->
			<include>**/User*Test.java</include>
		</includes>
		<excludes><!-- -->
			<exclude>**/User*TestCase.java</exclude>
		</excludes>
	</configuration>
</plugin>

私服(重点)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值