首页 > 其他 > 详细

Maven入门&基础操作

时间:2021-04-14 15:12:30      阅读:15      评论:0      收藏:0      [点我收藏+]

Maven

Maven 简介

Maven 是一个项目管理和整合工具。Maven 为开发者提供了一套完整的构建生命周期框架。开发团队几乎不用花多少时间就能够自动完成工程的基础构建配置,因为 Maven 使用了一个标准的目录结构和一个默认的构建生命周期。

在有多个开发团队环境的情况下,Maven 能够在很短的时间内使得每项工作都按照标准进行。因为大部分的工程配置操作都非常简单并且可复用,在创建报告、检查、构建和测试自动配置时,Maven 可以让开发者的工作变得更简单。

Maven 能够帮助开发者完成以下工作:

  • 构建
  • 文档生成
  • 报告
  • 依赖
  • SCMs
  • 发布
  • 分发
  • 邮件列表

总的来说,Maven 简化了工程的构建过程,并对其标准化。它无缝衔接了编译、发布、文档生成、团队合作和其他任务。Maven 提高了重用性,负责了大部分构建相关的任务。

项目的构建

构建是面向过程的,使用一些步骤,完成项目代码的编译,测试,运行,打包,部署等等。
maven 支持的构建包括有:

1.清理, 把之前项目编译的东西删除掉,为新的编译代码做准备。

2.编译, 把程序源代码编译为执行代码, java-class 文件
批量的,maven 可以同时把成千上百的文件编译为class。
javac 不一样,javac 一次编译一个文件。

3.测试, maven 可以执行测试程序代码,验证你的功能是否正确。
批量的,maven 同时执行多个测试代码,同时测试很多功能。

4.报告, 生成测试结果的文件, 测试通过没有。

5.打包, 把你的项目中所有的 class 文件,配置文件等所有资源放到一个压缩文件中。
这个压缩文件就是项目的结果文件, 通常java程序,压缩文件是 jar 扩展名的。
对于 web 应用,压缩文件扩展名是 .war

6.安装, 把 5. 中生成的文件 jar,war 安装到本机仓库

7.部署, 把程序安装好可以执行。

Maven 核心概念

POM

表示一个文件: pom.xml,意为项目对象模型(Project Object Model),Maven 把一个项目作为一个模型来使用,可以控制 Maven 构建项目的过程和管理 jar 依赖。

约定的目录结构

Maven 项目的目录和文件的位置,是有规定的,因此叫做约定的目录结构

坐标

是一个唯一的字符串,是用来表示资源的

依赖管理

用来管理项目中可以使用的 jar 文件

仓库管理

资源存放的位置

生命周期

Maven 构建项目的过程

插件和目标

执行 Maven 构建时,用的工具是插件

继承

一个 maven 项目可以继承另一个 maven 的依赖, 称为子项目 父项目

聚合

在开发2个以上模块的时候,每个模块都是一个 Maven Project。比如搜索平台,学习平台,考试平台。开发的时候可以自己管自己独立编译,测试,运行。但如果想要将他们整合起来,我们就需要一个聚合工程。

Maven 的使用

Maven 的安装

1.下载 Maven : https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.zip

注:比较常用的 Maven 版本为 3.3.9 ,配合的 JDK 版本为 : JDK 1.8(Java8)

2.将 Maven 的压缩文件解压缩到不带中文的目录下,本次解压目录为 D:\MavenWork

3.Mavne 目录结构
子目录 bin : 放置可执行程序,主要是 mvn.cmd
conf : Maven 工具本身的配置文件,setting.xml

4.配置环境变量
在系统的环境变量中,指定一个名为 M2_HOME 的环境变量,指定其值为 Maven 工具安装主目录,为 bin 的上一级目录
再在系统环境变量的 Path 变量中配置一个 %M2_HOME%\bin 目录即可

配置成功后,在命令行验证,输入 mvn -v ,出现如图所示,证明 Maven 以配置好

技术分享图片

注:在这之前,需要先配置 JAVA_HOME 指定 JDK 的环境变量,否则 Maven 无法配置成功

约定的目录结构

目录结构

每一个 maven 项目在磁盘中都是一个文件夹(项目-Hello)
Hello
|---src
|---|---main # 放你主程序 java 代码和配置文件
|---|---|---java # 你的程序包和包中的 java 文件
|---|---|---resources # 你的 java 程序中要使用的配置文件
|---|---test # 放测试程序代码和文件的(可以没有)
|---|---|---java # 测试程序包和包中的 java 文件
|---|---|---resources # 测试 java 程序中要使用的配置文件
|---pom.xml # maven 的核心文件(maven 项目必须有)

编译项目

在项目的根目录下,如: D:\Documents\Java代码\MavenTest,使用 mvn compile 编译 src / main 下的 所有 java 文件

若从没有使用过 Maven ,那么在编译过程中,Maven 会进行了许多下载操作
1.为什么要下载: Maven 的工具执行的操作需要很多插件来完成,需要从仓库中进行下载

2.下载什么东西:插件( jar 文件)

3.下载到哪里:默认路径为用户目录下的 .m2 目录,称为默认仓库(本机仓库) C:\ Users \ hasee \ .m2 \ repository

4.项目编译完成后,命令行出现 BUILD SUCCESS 字样,说明项目编译成功,其他 Maven 命令也是如此

5.mvn compile 命令执行成功后在项目的根目录下会生成一个 target 目录,名为结果目录,Maven 编译的 java 文件的 class 文件最后都存放在该目录中

仓库

1.仓库的概念:Maven 把所有的资源存储在一个位置( jar 依赖,插件等),这个位置就叫仓库(本机仓库)

2.修改本机仓库的位置

  • 修改 Maven 的配置文件,Maven 安装目录下的 / conf / settings.xml 修改之前先备份
  • 修改 localRepository 标签的值,指定本地仓库的位置,不要使用中文目录

3.仓库的分类

  • 本地仓库:存在于个人计算机上的仓库
  • 远程仓库:在互联网上的,需要网络才能使用的仓库
    • 中央仓库:最权威的,所有的开发人员都共享使用的集中的一个远程仓库,中央仓库地址: https://repo.maven.apache.org
    • 中央仓库的镜像:相当于中央仓库的备份,在各大洲和重要的城市都有中央仓库的镜像
    • 私服:在局域网中使用的,例如公司的内部

4.仓库的使用

  • 仓库的使用不需要人为的参与
  • 若开发人员需要使用 MySql 的驱动, Maven 首先查询本地仓库(若没有相关资源),查询私服(若没有相关资源),查询中央仓库的镜像(若没有),最终查询中央仓库(若中央仓库没有,则就不再查询),一旦在某一阶段查到了相关的资源,则该资源会自动保存到本地仓库中,下次直接从本地仓库中获取

POM.XML 文件

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">
 <!--
  pom 项目对象模型(Project Object Model),Maven 将一个项目的结构和内容抽象成一个模型,在 xml 文件中进行声明,pom.xml 是 Maven 的灵魂
 -->

 <!-- Maven 模型的版本 只能是 4.0.0 -->
 <modelVersion>4.0.0</modelVersion>


 <!--
 坐标:
  通过下面的 groupId | artifactId | version 构成了一个 Maven 项目的基本坐标 通过坐标 可以唯一定位到某一个项目
 -->
 <!--组织 id 一般为公司域名的倒写或者加上项目名(不做强行要求 可以为任意字符串) 例如: cn.scitc.StudentManager-->
 <groupId>com.bjpwoernode.maven</groupId>

 <!--指定项目的名称 也是模块的名称 对应的是 groupId 项目中的子项目-->
 <artifactId>ch01-maven</artifactId>

 <!--项目的版本号 如果项目还在开发中 为不稳定的版本 通常在版本后带上 -SNAPSHOT -->
 <version>1.0-SNAPSHOT</version>

 <!--
 打包的格式,可以为:pom , jar , maven-plugin , ejb , war , ear , rar , par , web 应用为 war 也可以不写 默认为 jar
 -->
 <packaging>jar</packaging>

 <!--
 properties 配置一些属性
 -->
 <properties>
 </properties>

 <!--
 依赖 将项目中所需的资源,通过依赖的方式,添加进来,依赖的 groupId | artifactId | version 的值,
 在本地仓库中,分别对应的就是一个目录名,三者由上到下具有目录的层级关系
 如下:添加了一个 MySql 依赖,可以在 dependencies 中利用 dependency 添加多个依赖
  -->
 <dependencies>
     <dependency>
         <groupId>mysql</groupId>
         <artifactId>mysql-connector-java</artifactId>
         <version>5.1.7</version>
     </dependency>
 </dependencies>

 <!--Maven 在进行项目构建时的配置信息,例如指定编译 Java 代码的 JDK 版本-->
 <build>
 </build>
</project>

Maven 生命周期 & 常用命令 & 插件

1.Maven 生命周期

技术分享图片

Maven 的生命周期就是 Maven 构建项目的过程,分为:清理,编译,测试,报告,打包,安装,部署

2.Maven 命令

  • Maven 独立使用,通过命令完成 Maven 生命周期的执行,Maven 可以使用命令来完成项目的清理,编译,测试....等

3.Maven 插件

  • Maven 命令执行时,真正完成命令的是插件,插件就是一些 jar 文件
  • 技术分享图片
    • Maven 在执行某一个生命周期时,会将前面的生命周期执行一次
    • 执行 mvn package 打包的 jar ,只包含 src / main 下的所有内容
    • mvn install 会将项目安装到本地仓库中,安装后的项目,可以通过坐标来访问和使用

插件的配置

<!--Maven 在进行项目构建时的配置信息,例如指定编译 Java 代码的 JDK 版本-->
<build>
 <!--配置多个插件-->
 <plugins>
     <!--配置一个插件-->
     <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <!--插件的名称-->
         <artifactId>maven-compiler-plugin</artifactId>
         <!--插件的版本-->
         <version>3.8.1</version>
         <!--配置插件的信息-->
         <configuration>
             <!--使用的 JDK 版本为 1.8 来编译项目-->
             <source>1.8</source>
             <!--程序的运行环境为 JDK 1.8 -->
             <target>1.8</target>
         </configuration>
     </plugin>
 </plugins>
</build>
<!--资源的过滤
默认没有使用 resources 的时候, maven 执行编译代码时, 只会把 src/main/resource 目录中的文件拷贝到 target/classes目录中。
-->
<build>
 <resources>
     <resource>
         <directory>src/main/java</directory><!--所在的目录-->
         <includes><!--包括目录下的.properties, .xml 文件都会扫描到-->
             <include>**/*.properties</include>
             <include>**/*.xml</include>
         </includes>
         <!—filtering 选项 false 不启用过滤器, *.property 已经起到过滤的作用了 -->
         <filtering>false</filtering>
     </resource>
 </resources>
</build>

IDEA 中使用 Maven

1.在 IDEA 中设置 Maven ,让 IDEA 和 Maven 结合使用,虽然 IDEA 中内置了 Maven ,但一般不使用 ,因为使用内置的 Maven 修改配置不方便,因此使用自己安装的 Maven ,需要覆盖 IDEA 中的默认设置,让 IDEA 知道 Maven 的安装信息

2.在idea中设置maven ,让idea和maven结合使用。
idea中内置了maven ,一般不使用内置的, 因为用内置修改maven的设置不方便。
使用自己安装的maven, 需要覆盖idea中的默认的设置。让idea指定maven安装位置等信息

配置的入口 ①:配置当前工程的设置, file--settings ---Build, Excution,Deployment--Build Tools
--Maven
Maven Home directory: maven的安装目录
User Settings File : 就是maven安装目录conf/setting.xml配置文件
Local Repository : 本机仓库的目录位置

? --Build Tools--Maven--Runner
? VM Options : archetypeCatalog=internal
? JRE: 你项目的jdk

archetypeCatalog=internal , maven项目创建时,会联网下载模版文件,比较大, 使用 archetypeCatalog=internal,不用下载, 创建maven项目速度快。(IDEA19版本可能会出现问题,不建议使用)
②:配置以后新建工程的设置, file--other settings--Settings for New Project

IDEA 使用 Maven 创建 JavaSE 项目

1.使用模板创建普通的 JavaSE 项目

技术分享图片

技术分享图片

注:在构建项目时,若速度过慢,可以在构建 Maven 项目时,设置参数,如下

技术分享图片

或者直接在 IDEA 中设置

技术分享图片

当设置的值为 local 时,本地仓库中必须有: archetype-catalog.xml 文件,或者设置值为: internal,速度也较快

IDEA 创建 JavaWeb 项目

选择 web 模板即可创建

技术分享图片

导入 Maven 项目到 IDEA

技术分享图片

依赖范围

1.依赖范围,用于表示依赖使用的范围,也就是在 Maven 构建的哪些阶段其作用,使用 scope 表示,其值有:

compile: 在项目生命周期的所有阶段生效
test: 只在项目生命周期的测试阶段有效
provided: 在项目的编译和测试阶段有效,但在项目的打包阶段则不会生效
注:默认是 complie

技术分享图片

Maven 常用设置

1.常用属性

<!--Maven 的属性设置,设置 Maven 的常用属性-->
<properties>
 <!--Maven 项目构建使用的编码集,避免中文乱码-->
 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 <!--编译代码使用的 JDK 版本-->
 <maven.compiler.source>1.8</maven.compiler.source>
 <!--运行程序使用的 JDK 版本-->
 <maven.compiler.target>1.8</maven.compiler.target>
</properties>

2.自定义全局变量

  • 在 properties 标签中通过自定义的标签声明变量,标签名就是变量名
  • 找 pom.xm 中的其他位置,使用 ${标签名} 来使用变量的值
  • 自定义的全局变量一般用来定义依赖的版本号,当项目中要使用多个相同的依赖版本,先使用全局变量来定义,再使用 ${变量名} 来使用

Maven 继承

1.现状
不同的项目中,使用的依赖相同,版本不同,且由于 test 范围的依赖无法传递,使其分散在各个工程之中,造成版本的不一致

2.解决办法
将依赖提取到父工程中,在子工程中声明依赖时,不声明版本,以父工程中为准

3.操作步骤

  • 创建一个 Maven 工程作为父工程,注意: 打包的方式为 pom

    <!--当前工程作为父工程,打包方式就为 pom -->
    <packaging>pom</packaging>
    
  • 在子工程中,声明对父工程的引用

    <!--声明对父工程的引用-->
    <parent>
        <!--通过父工程的坐标来引入-->
        <groupId>org.example</groupId>
        <artifactId>Maven-ch01-javase</artifactId>
        <version>1.0-SNAPSHOT</version>
        <!--以当前 pom.xml 文件为基准的,父工程 pom.xml 文件的相对路径,也可以不写-->
        <relativePath>../pom.xml</relativePath>
    </parent>
    
  • 将子工程的坐标与父工程坐标中重复的内容删除

    • 一般指的是子工程中的 groupId ,在 IDEA 这,会自动删除
  • 在父工程中统一依赖

    <!--父工程中依赖的管理-->
    <dependencyManagement>
        <dependencies>
            <!--例如:统一 junit 的版本为 4.9 -->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.9</version>
                <scope>test</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    
  • 在子工程中删除统一了的依赖的版本号

    <!--子工程直接引用父工程的依赖,不需要写版本号-->
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    
  • 注: 配置继承后,执行安装命令时,要先安装父工程。

Maven 聚合

1.作用

  • 一键安装各个工程模块

2.配置方式

  • 在一个总的聚合工程中,去配置各个参与聚合的模块,注意: 各个工程之间不一定非要是子父工程的关系,其他的多个工程也可以使用聚合,但是,一般都既是子父关系,又使用聚合来安装工程

    <!--使用 modules 配置聚合-->
    <modules>
        <!--指定各个子工程的相对路径-->
        <module>Maven-ch01.1-javase</module>
    </modules>
    

3.使用方式

  • 在父工程上,执行安装命令即可

Maven入门&基础操作

原文:https://www.cnblogs.com/hashmap-put/p/14657141.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!