小白学习Java第四十四天

  • Maven概述

1、maven概念

  1. 概念:

Maven Apache 软件基金会组织维护的一款自动化构建工具,专注服务于 Java 平台的

目构建依赖管理

  1. 核心构成:

Maven 是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组

标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency

Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)

的逻辑。

2、maven好处

1jar依赖的引入:之前拷贝jar包的操作,随着项目增多,磁盘里面jar包会增加,这样会占用越来越多磁盘空间。Maven里面我们使用坐标来引入jar依赖。

2jar依赖的获取:之前下载jar包,我们通常是登录官网去下载。这样的操作比较麻烦。Maven提供了依赖仓库。

3jar依赖的传递:当前项目引入其他项目的时候,可以将引入项目里面的jar直接使用。

4、项目的模块化管理:maven提供了原型模块化操作。内置一些项目模板,我们使用命令来创建项目结构。

3、构建及自动化构建

1)概念:

构建就是以我们编写的 Java 代码、框架配置文件、国际化等其他资源文件、JSP 页面和图片等静态资源作为“原材料”,去“生产”出一个可以运行的项目的过程。(创建项目)

2)构建过程的几个主要环节:

  • 清理:删除以前的编译结果,为重新编译做好准备。(清理class文件)
  • 编译:将 Java 源程序编译为字节码文件 java---class
  • 测试:针对项目中的关键点进行测试,确保项目在迭代开发过程中关键点的正确性
  • 报告:在每一次测试后以标准的格式记录和展示测试结果(doc文档)
  • 打包:将工程封装为一个压缩文件,Java 工程对应 jar 包,Web 工程对应 war
  • 安装:将打包的结果jar 包或 war 包安装到本地仓库中。
  • 部署:将打包的结果部署到远程仓库或将 war 包部署到服务器上运行

3Maven把以上的操作整合到一起,实现了机械化的构建,也就是我们说的自动化构建。

4、maven仓库

Maven 的术语中,仓库是一个位置(place)。Maven 仓库是项目中依赖的第三方库,这个库所在的位置叫做仓库。在 Maven 中,任何一个依赖、插件或者项目构建的输出,都可以称之为构件。Maven 仓库能帮助我们管理构件(主要是JAR),它就是放置所有JAR文件(WARZIPPOM等等)的地方。

通俗的理解就是存放jar包的地方。

1、本地仓库:本地磁盘仓库

  • 系统默认的:C:\Users\admin\.m2
  • 自定义仓库:根据自己的设置
  1. 远程仓库:
  1. 中央仓库:服务器在国外,所有的资源都可以找到。访问比较慢

https://mvnrepository.com/

  1. 镜像仓库:国内的一些企业将中央仓库的资源下载到国内。比较常见的:阿里云、华为云、腾讯云
  2. 私服仓库:企业内部搭建的局域网服务器

3、本次学习我们使用阿里云镜像仓库:

地址:仓库服务

  • Maven下载安装

1、maven下载

  1. 官网下载地址:Maven – Welcome to Apache Maven

进入官网选择相应版本下载即可

  1. 我们使用3.5.4稳定版本。

 

点击相应的版本,解压到一个没有中文的目录下,解压后目录结构如下:

 

2、maven配置环境变量

使用maven的前提需要我们的电脑中jdk的环境变量配置正确。

配置maven的环境变量:

  1. 配置maven_home

 

  1. 配置path变量

 

3、settings文件配置

Mavenconf目录下的settings.xml文件中配置

1、自定义本地仓库:

 

2、配置阿里云镜像:

 <mirror>

      <id>aliyunId</id>

      <mirrorOf>central</mirrorOf>

      <name>aliyun maven</name>

      <url>https://maven.aliyun.com/repository/central</url>

 </mirror>

3、验证安装:cmd输入命令mvn -v

  • Maven常用命令

1、创建项目

使用maven内置原型模板,创建项目的命令:mvn archetype:generate

groupId:组织名,即包名

artifactid:项目名

package:默认同groupId

注意在创建过程中使用项目模板时7表示普通java项目,10表示web项目。

java项目结构:

 

web项目结构:

 

2、编译

编译命令:mvn compile

生成taget目录,里面是java文件的编译后的class文件

注意:该命令一定要进入到项目目录下进行编译。

 

3、清理

清理命令:mvn clean

项目需要重新编译的时候,将原来的编译后的class文件清除掉。即删除taget目录

4、测试

测试命令:mvn test

相当于我们之前的单元测试,默认会执行test目录下面的测试文件

 

5、打包

打包命令:mvn package

将项目导出成一个jar或者war包。

java项目--jar

web项目--war

6、安装

安装命令:mvn install 

将项目打包并且发送一份到本地仓库

说明:安装命令会在本地仓库安装一份包文件,用来提供给其他的项目引用。

  • Maven生命周期

1.概念

官网查看:Maven Core – Lifecycles Reference

概念:Maven 生命周期是将构建的环节进行了分组,某几个环节构成了一个生命周期。

特点:当执行某个命令的时候,会从当前周期的的第一个构建环节开始执行,到当前构建环节结束。

2.特点

Maven官网查看maven-lifecycles

 

Maven 有三套相互独立的生命周期,分别是:

  1. Clean Lifecycle

在进行真正的构建之前进行一些清理工作。 (清除项目之前编译的class文件)

  1. Default Lifecycle

构建的核心部分,编译,测试,打包,安装,部署等等。(构建的核心环节)

  1. Site Lifecycle

生成项目报告,站点,发布站点。

它们是相互独立的,你可以仅仅调用 clean 来清理工作目录,仅仅调用 site 来生成站点。 当然你也可以直接运行 mvn clean install site 运行所有这三套生命周期。

3.详解

每套生命周期都由一组阶段(Phase)组成,我们平时在命令行输入的命令总会对应于一个特定 的阶段。比如,运行 mvn clean,这个 clean Clean 生命周期的一个阶段。有 Clean 命周期,也有 clean 阶段。

1Clean 生命周期 Clean 生命周期一共包含了三个阶段: pre-clean 执行一些需要在 clean 之前完成的工作 clean 移除所有上一次构建生成的文件 post-clean 执行一些需要在 clean 之后立刻完成的工作

  1. Site 生命周期 pre-site 执行一些需要在生成站点文档之前完成的工作 site 生成项目的站点文档 post-site 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备 site-deploy 将生成的站点文档部署到特定的服务器上 这里经常用到的是 site 阶段和 site-deploy 阶段,用以生成和发布 Maven 站点,这可是 Maven 相当强大的功能,Manager 比较喜欢,文档及统计数据自动生成,很好看
  2. Default 生命周期是 Maven 生命周期中最重要的一个,绝大部分工作都发生在这个生命周期中。

五、maven核心概念

1、Maven标准目录结构

 

2、Pom.xml配置文件

  1. POM( Project Object Model,项目对象模型 ) Maven 工程的基本工作单元,是一个XML文件,包含了项目的基本信息,用于描述项目如何构建,声明项目依赖,等等。
  2. 执行任务或目标时,Maven 会在当前目录中查找 POM。它读取 POM,获取所需的配置信息,然后执行目标。
  3. POM 中可以指定以下配置:
  1. 项目依赖
  2. 插件
  3. 执行目标
  4. 项目构建 profile
  5. 项目版本
  6. 项目开发者列表
  7. 相关邮件列表信息
<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/xsd/maven-4.0.0.xsd">

  <!--模型版本-->

  <modelVersion>4.0.0</modelVersion>

  

  <!--公司组织名称-->

  <groupId>com.offcn</groupId>

  <!--项目名-->

  <artifactId>mavendemo01</artifactId>

  <!--版本号-->

  <version>1.0-SNAPSHOT</version>

  <!--项目默认打包方式-->

  <packaging>jar</packaging>

  

  <name>mavendemo01</name>

  <url>http://maven.apache.org</url>

<!--属性配置信息-->

  <properties>

    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

  </properties>

<!--坐标依赖-->

  <dependencies>

    <!--配置jar包-->

    <dependency>

      <groupId>junit</groupId>

      <artifactId>junit</artifactId>

      <version>3.8.1</version>

      <scope>test</scope>

    </dependency>

    <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->

    <dependency>

      <groupId>mysql</groupId>

      <artifactId>mysql-connector-java</artifactId>

      <version>5.1.40</version>

    </dependency>

  </dependencies>

</project>

                    

3、Maven坐标

几何中坐标:x  y  z 表示一个元素在空间中的位置

Maven坐标:groupId  artifactId version通过这三个参数确定一个唯一的依赖。

  1. 确定项目在本地仓库的位置
  2. 确定引入的依赖jar

项目中引入依赖方式:通过坐标形式引入依赖,也就是我们之前的jar的引入。

<depedency>

<groupId>junit<groupId>

<artifactId>junit<aetifactId>

<version>3.8.1<version>

</depedency>

3、获取依赖的坐标的方式:maven中央仓库获取

https://mvnrepository.com/

 

六、idea整合Maven

1、idea配置maven

 

2、idea创建maven项目

1、使用模板创建java项目

 

2、使用模板创建一个javaweb项目

 

3、关于每次创建maven项目的时候需要去配置maven的问题

 

4、不使用模板创建项目

1Idea创建的maven项目中如果项目是一个java项目,pom文件中省略 <packaging>jar</packaging>。打包的的时候会自动打一个jar

2ideamaven项目是一个web项目,pom文件中肯定会有标签<packaging>war</packaging>。打包的时候会创建一个war

5、idea中使用maven的命令

Idea右侧面板中:

Maven Project >项目名称 >Lifecycle >选择命令双击即可

七、Maven依赖管理

1、依赖传递

  1. 依赖传递的概念:

在项目A中引入一个jar包,项目B中引入项目A,这个时候项目B就可以直接使用A中引入的依赖,这种就是依赖的传递。

  1. 依赖传递的原则:
  1. 引入的位置优先:后面引入的会覆盖前面引入的依赖
  2. 距离最短的优先级高

  1. 引入依赖的范围:scope

 

  1. scope值为compile的时候,可以依赖传递。其他两个值不可以依赖传递。
  2. provided典型:servlet-api
  3. test典型:junit

2、依赖冲突解决

  1. 当项目中引入的jar重复的时候,会产生jar冲突问题。
  2. 解决jar依赖引入冲突的方式:
  • 可以删除不需要的
  • 可以改变依赖引入的位置顺序
  • 使用scope属性设置依赖传递
  • 使用依赖的排除,使用<exclusions>标签排除

 

八、maven项目管理

1、版本统一管理

当项目中引入的依赖比较多的时候,依赖的版本有些是一样的,这个时候可以使用统一版本管理方式。

统一版本管理实现:

  1. 设置一个版本的自定义标签

 

  1. 使用自定义标签

 

2、maven继承

继承:maven中设置一个父工程,其他的工程可以继承这个工程。子工程就可以直接使用父工程中的依赖。

语法:

  1. 父工程打包形式需要设置为pom,作用是给子工程提供依赖

  1. 在子工程中使用parent节点引入父工程坐标

 

 

3、maven聚合

聚合:将多个项目整合到一个项目下,进行统一的编译运行。聚合的前提是存在继承关系。

聚合的实现:

  1. 创建父工程,使用mudule标签将子工程引入

  1. 创建子工程,子工程中需要设置继承

 

聚合的作用:

可以通过编译父工程实现将所有的子工程一起编译。

小结:

继承和聚合工程通常使用在分布式多模块项目开发时候,一般的小项目使用的还是比较少。

4、继承和聚合的关系

Maven 的聚合特性可以帮助我们把项目的多个模块聚合在一起,使用一条命令进行构 建,即一条命令实现构建多个项目;

Maven 的继承特性可以将各个模块相同的依赖和插件配置提取出来,在简化 POM 的同时还可以促进各个模块配置的一致性。

虽然聚合模块和父模块经常合二为一,但是聚合和继承是两个不同的概念,其实是没有 什么关系的。

聚和模块知道它聚合了哪些模块,但是被聚合的模块不知道聚合模块的存在;

继承中父模块不知道子模块的存在,但是子模块都必须知道自己的父模块是谁。

  • 改造项目-图书项目
  1. 创建一个web类型的maven项目,修改目录结构

 

  1. 将原图书项目中的c3p0配置文件放到resources文件夹下
  2. 将原图书项目中的com包整体复制到java目录下

 

  1. 配置pom.xml文件,将需要的依赖坐标复制到文件中

<?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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.ujiuye</groupId>
  <artifactId>maven_booksys</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

  <name>maven_booksys Maven Webapp</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
    <!-- https://mvnrepository.com/artifact/com.mchange/c3p0 -->
    <dependency>
      <groupId>com.mchange</groupId>
      <artifactId>c3p0</artifactId>
      <version>0.9.2.1</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/commons-dbutils/commons-dbutils -->
    <dependency>
      <groupId>commons-dbutils</groupId>
      <artifactId>commons-dbutils</artifactId>
      <version>1.7</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/commons-lang/commons-lang -->
    <dependency>
      <groupId>commons-lang</groupId>
      <artifactId>commons-lang</artifactId>
      <version>2.6</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>fastjson</artifactId>
      <version>1.2.62</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/com.mchange/mchange-commons-java -->
    <dependency>
      <groupId>com.mchange</groupId>
      <artifactId>mchange-commons-java</artifactId>
      <version>0.2.3.4</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.40</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
      <scope>provided</scope>
    </dependency>
      <!-- https://mvnrepository.com/artifact/commons-beanutils/commons-beanutils -->
      <dependency>
          <groupId>commons-beanutils</groupId>
          <artifactId>commons-beanutils</artifactId>
          <version>1.8.3</version>
      </dependency>
    <!-- https://mvnrepository.com/artifact/commons-lang/commons-lang -->
    <dependency>
      <groupId>commons-lang</groupId>
      <artifactId>commons-lang</artifactId>
      <version>2.6</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/commons-logging/commons-logging -->
    <dependency>
      <groupId>commons-logging</groupId>
      <artifactId>commons-logging</artifactId>
      <version>1.2</version>
    </dependency>
  </dependencies>
</project>

5.配置本地tomcat启动运行即可。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值