【Maven】项目管理

Maven项目管理

1、什么是Maven

传统项目管理状态分析

  • jar包不统一,jar包不兼容,可能有的升级之后就发生冲突了
  • 工程升级维护过程操作繁琐

Maven是什么

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

image-20210707181214815

我们现在只需要明白一点:依赖管理是从 中央仓库里拿到的

Maven的作用:

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

image-20210707181534089

2、Maven安装与配置

1、Maven 的安装很简单 ,去官网加载即可,

image-20210707182808311

下载好,解压到目录即可。

2、

  • Maven依赖Java 需要配置JAVA_HOME
  • 设置Maven自身的运行环境,需要匹配MAVEN_HOME

image-20210707183217710

image-20210707183829792

环境变量这两步就配置好了

打开cmd 输入mvn 如果配置好了就可以看到如图所示

image-20210707183936089

3、Maven基础概念

3.1、仓库

image-20210707184309207

image-20210707185152248

3.2、坐标

什么是坐标:

  • MAven坐标作用于描述仓库中资源的位置

Maven坐标的组成

  • groupId:定义当前Maven项目隶属组织名称(通常是域名反写)
  • artifactId: 定义当前Maven项目名称
  • version: 定义当前项目版本号

Maven坐标的作用:

  • 使用唯一标识,唯一性定位资源位置,通过该标识可以将资源的识别于下载工作交由机器完成。坐标不是给人用的而是给Maven 工具用的

3.3 仓库配置

  1. 更改本地储存的位置,默认储存在c盘所以我将它该到了D盘

image-20210707190747587

  1. 镜像仓库 我们直接从中央仓库下载jar包(国外网址)速度很慢,所以我们需要从国内的网址下。同样是在那个setting文件下,我们使用阿里云仓库。记得不要放在最外围的mirror标签下面

image-20210707201755745

    <mirror>
      <!--此镜像的唯一标识符,用来区分不同的mirror元素-->
      <id>nexus-aliyun</id>
      <!--对哪种仓库进行镜像,简单的说就是代替哪个仓库-->
      <mirrorOf>central</mirrorOf>
      <!--名称-->
      <name>Nexus aliyun</name>
      <!--镜像URL-->
      <url>http://maven.aliyun.com/nexus/content/groups/public</url>
    </mirror>

4、 第一个Maven项目

4.1、手工制作

第一个Maven项目完全手写,了解一下一个完整的Maven项目的结构

image-20210707181534089

按照对应的结构我们创建文件夹 ,之后写一点简单的代码

image-20210707194653788

image-20210707204009818

我们按照结构把代码写好了,但是这还不是maven工程。我们还需要在src下面有一个pom.xml文件。我们可以在maven随便一个jar下面找到一个最简单的pom文件然后自己修改。

<?xml version="1.0"?>

<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns="http://maven.apache.org/POM/4.0.0">

<modelVersion>4.0.0</modelVersion>

<!--我们自己的坐标-->
<groupId>com.yubao</groupId>
<artifactId>project.java</artifactId>
<version>1.0</version>
<packaging>jar</packaging>



<dependencies>
    <dependency>
        <!-- 我们所使用的坐标-->

        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>

    </dependency>
</dependencies>

</project>

image-20210707200259502

  1. mvn compile 编译

全部写完之后打开cmd,通过命令编译这个项目

image-20210707202104770

编译后会自动下载编译所需要的文件。这时候我们打开我们改过的仓库位置就会发现里面多了很多东西。

image-20210707202344908

第一次编译要下载很多东西,所以比较慢。编译完成后我们的src所在的位置会多一个target文件夹 。

  1. mvn clean 我们也可以执行清理操作

image-20210707203006158

执行完mvn clean这个target文件夹就被清理掉了

  1. mvn test 测试

image-20210707204331199

运行完之后可以在target文件夹找到运行结果

  1. mvn package 打包好出现在target文件夹下

image-20210707205146215

从cmd上我们可以看到在打包之前会先编译和测试

  1. mvn install 把我们现在打包的东西放在仓库里

箭头分别对应了我们com 项目名 版本号

image-20210707205315442

4.2、插件创建工程

image-20210707210108165

5 、IDEA连接Maven

5.1、连接并创建一个项目

首先我们在IDEA里面创建一个空的项目,创建完选择我们的JDK版本

image-20210707212818608

之后打开我们的设置,搜索Maven,选择我们的版本 settings文件和仓库地址

image-20210707212935394

配置好Maven之后我们新建Module

image-20210707213240080

填写好相关信息,可以给对应的文件夹设置属性,一开始都是空的,test下没有resouces

image-20210707213305689

这样我们的框架就搭好了,之后我们把测试Maven工程的jar加进去。写好记得刷新,否则出现不了。

image-20210707213909051

接下来开始写我们的Maven项目,在main和test目录下把我们之前写的简单代码再cv上去。右侧都是我们之前的命令行操作

image-20210707214901130

那么我们再另外一个地方也可以选择操作

image-20210707215358539

那么这个有什么用呢?

一是我们可以不用让右边的功能栏占地方。

二是 我们Maven工程想打断点,就要再这个地方写一个运行,然后在点击右侧的debug就可以调试了。

5.2、使用模板创建项目

5.2.1Java项目

还是新建一个Modules,这次点击使用模板,并搜索quick,找到的那个就是创建java的

image-20210707220703854

这样创建有什么区别呢?

唯一的区别:就是 在main和test目录下少了resouces这个目录,但是他会自动给我们创建好java类

我们手动添加即可

image-20210707221324635

5.2.2 Web项目

具体步骤跟创建java项目差不多只是选择的模板不同。

image-20210707225120890

创建好之后我们将缺少的东西补全

image-20210707225307185

删除pom文件的这些内容

image-20210707225520131

去Maven的仓库下载tomcat的插件,搜索 tomcat maven 并复制代码

image-20210707230731270

然后在我们的IDEA上 pom文件上写上 加入插件的代码,加载好之后点击run

image-20210707231343889

点击网址就能显示

image-20210707231534889

我们还可以设置端口号和虚拟路径

image-20210707231702196

那么这样启动很麻烦

我们可以像之前一样,设置一个单独的按钮

image-20210707231847033

下面是完整有注解的代码

<?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工程打包为 war  java工程打包为 jar-->
  <packaging>war</packaging>

  <name>web02</name>
  <!--组织id 通常是域名反写-->
  <groupId>com.yubao</groupId>
  <!--项目id  -->
  <artifactId>web02</artifactId>
  <!--版本号 : release 完成版  snapshot 开发版-->
  <version>1.0-SNAPSHOT</version>

  <!--设置当前工程的所有依赖-->
  <dependencies>
    <!--具体的依赖-->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
    </dependency>
  </dependencies>
  <!--构建-->
  <build>
    <!--设置插件-->
    <plugins>
      <!--具体的插件配置-->
      <plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat7-maven-plugin</artifactId>
        <version>2.2</version>
        <configuration>
          <!--设置端口号-->
          <port>80</port>
          <!--设置虚拟路径-->
          <path>/</path>
        </configuration>
      </plugin>

    </plugins>

  </build>

</project>

6、依赖管理

  • 依赖指当前项目运行所需的jar,一个项目可以设置多个依赖

依赖就是上文注解里写的,在标签里面添加坐标

6.1、依赖传递

  • 依赖具有传递性

    • 直接依赖: 在当前项目中通过以依赖配置建立的依赖关系

    • 间接依赖:以来的资源如果依赖其他资源,当前项目间接依赖其他资源

    • 这种依赖关系是相对的

image-20210707234304497

image-20210708000204862

我们在java01中添加了对java02的依赖,那么我们在Java01 的依赖中就可以看到有java02的依赖log4j

  • 依赖冲突问题

    • 路径优先:当依赖中出现相同的资源时,层级越深,优先级越低,层级越浅,优先级越高
    • 声明优先:当资源在相同层级被依赖时 ,配置顺序靠前的覆盖配置靠后的 。
  • 可选依赖

    • 可选依赖指对外隐藏当前所依赖的资源———不透明

    image-20210708000359915

在java02的依赖中加上一个语句就可以让添加了java02的java01不知道java02添加了这个依赖。

我们也可以看到java02中依赖的junit里面依赖了另一个包,那么我们怎么将这个隐藏呢?按照我们之前的方法我们需要在写junit依赖的时候将那个包隐藏掉,但这是不可能的因为junit不是我们写的

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dVVyNZ1t-1625745984798)(C:\Users\zhang\AppData\Roaming\Typora\typora-user-images\image-20210708100736129.png)]

6.3、排除依赖

  • 之前学的可选依赖是我不让你看到,现在我们的做法是我添加依赖的时候不想看见你,就是排除依赖。

  • 排除依赖不需要写版本号,可以看到我们在java02添加junit依赖的时候排除了junit下面的依赖

6.4、 依赖范围

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v4fUjgtj-1625745984804)(C:\Users\zhang\AppData\Roaming\Typora\typora-user-images\image-20210708103809410.png)]

在下图的箭头位置显示了依赖的scope

image-20210708110357062

  • 依赖范围传递性
  • image-20210708110716788

7、生命周期与插件

7.1、项目构建生命周期

  • Maven对项目构建的生命周期划分为三套
    • clean: 清理工作
    • default:核心工作,例如编译,测试,打包,部署等
    • site: 产生报告,发布站点等

image-20210708111313340

image-20210708111339049

例如我们执行test的时候,test之前的所有活动都要执行。

image-20210708111352841

7.2、插件

  • 插件与生命周期内的阶段绑定,在执行到对应的生命周期时执行对应的插件功能。
  • 默认maven在各个生命周期上绑定有预设的功能
  • 通过插件可以自定义其他功能
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值