2021最新maven个人学习笔记整理

maven学习笔记整理

1.Maven是什么?

Maven【[ˈmevən]】这个词可以翻译为"专家",“内⾏”。 作为Apache组织中的⼀个颇为成功的开源项⽬, Maven主要服务于基于java平台的项⽬构建,依赖管理和项⽬信息管理。

Apache Maven 是一套软件工程管理和整合工具。基于工程对象模型(POM)的概念,通过一个中央信息管理模块,Maven 能够管理项目的构建、报告和文档。

maven可以简单理解为项目构建工具,非常容易管理项目

2.什么是项目构建工具

项⽬构建

不管你是否意识到什么是项目构建,构建(build)是每⼀位程序员每天都在做的⼯作。

来到公司,我们做的第⼀ 件事就是从源码库签出最新的代码,然后进⾏单元测试,如果测试失败,调试,修 复错误代码。

编写⾃⼰的单元测试及产品代码。

除了编写源代码,有相当⼀部分时间花在了编译,运⾏单元测 试,⽣成⽂档,打包和部署等繁琐且不起眼的⼯作上,这就是构建。

让这⼀系列⼯作完全⾃动化,使得软件的构建可以像全⾃动流⽔线 ⼀样,只需要⼀条简单的命令,所有繁琐的步骤都能够⾃动完成

构建工具有哪些

Ant构建

最早的构建⼯具,基于IDE, ⼤概是2000年有的,当时是最流⾏java构建⼯具,不过它的XML脚本编写格 式让XML⽂件特别⼤。对⼯程构建过程中的过程控制特别好

Gradle

属于结合以上两个的优点,它继承了Ant的灵活和Maven的⽣命周期管理,它最后被google作为了 Android御⽤管理⼯具。它最⼤的区别是不⽤XML作为配置⽂件格式,采⽤了DSL格式,使得脚本更加简 洁。

3.Maven的四大特性

3.1依赖管理系统

Maven为Java世界引⼊了⼀个新的依赖管理系统jar包管理 jar 升级时修改配置⽂件即可。在Java世界 中,可以⽤groupId、artifactId、version组成的Coordination(坐标)唯⼀标识⼀个依赖。

任何基于Maven构建的项⽬⾃身也必须定义这三项属性,⽣成的包可以是Jar包,也可以是war包

<dependency>
 <groupId>javax.servlet</groupId> com.baidu  
 <artifactId>javax.servlet-api</artifactId> ueditor echarts
 <version>3.1.0</version>
</dependency>

坐标属性的理解

groupId

定义当前Maven项⽬⾪属的实际项⽬-公司名称。(jar包所在仓库路径) 由于Maven中模块的概念,因 此⼀个实际项⽬往往会被划分为很多模块。 ⽐如spring是⼀个实际项⽬,其对应的Maven模块会有很 多,如spring-core,spring-webmvc等。

artifactId

该元素定义实际项⽬中的⼀个Maven模块-项⽬名, 推荐的做法是使⽤实际项⽬名称作为artifactId的前 缀。 ⽐如: spring-bean, spring-webmvc等。

version

该元素定义Maven项⽬当前所处的版本。

3.2maven多模块构建

项⽬复查时 dao service controller层分离将⼀个项⽬分解为多个模块已经是很通⽤的⼀种⽅式。

在Maven中需要定义⼀个parent POM作为⼀组module的聚合POM。在该POM中可以使⽤ 标签来定义⼀ 组⼦模块。

parent POM不会有什么实际构建产出。⽽parent POM中的build配置以及依赖配置都会⾃动继 承给⼦module。

3.3maven⼀致的项⽬结构

Ant时代⼤家创建Java项⽬⽬录时⽐较随意,然后通过Ant配置指定哪些属于source,那些属于 testSource等。

⽽Maven在设计之初的理念就是Conversion over configuration(约定⼤于配置)。

其制定 了⼀套项⽬⽬录结构作为标准的Java项⽬结构,解决不同ide 带来的⽂件⽬录不⼀致问题。

3.4maven⼀致的构建模型和插件机制

例如

<plugin>
 <groupId>org.mortbay.jetty</groupId>
 <artifactId>maven-jetty-plugin</artifactId>
 <version>6.1.25</version>
 <configuration>
 <scanIntervalSeconds>10</scanIntervalSeconds>
 <contextPath>/test</contextPath>
 </configuration>
</plugin>

4.maven安装配置和⽬录结构

Maven 是一个基于 Java 的工具,所以要做的第一件事情就是安装 JDK。

系统要求

项目 要求
JDK Maven 3.3 要求 JDK 1.7 或以上 Maven 3.2 要求 JDK 1.6 或以上 Maven 3.0/3.1 要求 JDK 1.5 或以上
内存 没有最低要求
磁盘 Maven 自身安装需要大约 10 MB 空间。除此之外,额外的磁盘空间将用于你的本地 Maven 仓库。你本地仓库的大小取决于使用情况,但预期至少 500 MB
操作系统 没有最低要求

步骤 1:检查 Java 安装

现在打开控制台,执行下面的 java 命令。

操作系统 任务 命令
Windows 打开命令控制台 c:\> java -version
Linux 打开命令终端 $ java -version
Mac 打开终端 machine:~ joseph$ java -version

如果你没有安装 Java,从以下网址安装 Java 软件开发套件(SDK):http://www.oracle.com/technetwork/java/javase/downloads/index.html。我们假定你安装的 Java 版本为1.8。

步骤 2:设置 Java 环境

设置 JAVA_HOME 环境变量,并指向你机器上的 Java 安装目录。例如:

操作系统 输出
Windows Set the environment variable JAVA_HOME to C:\Program Files\Java\jdk1.8.0_121
Linux export JAVA_HOME=/usr/local/java-current
Mac export JAVA_HOME=/Library/Java/Home

将 Java 编译器地址添加到系统路径中。

操作系统 输出
Windows 将字符串;C:\Program Files\Java\jdk1.8.0_121添加到系统变量“Path”的末尾
Linux export PATH= P A T H : PATH: PATH:JAVA_HOME/bin/
Mac not required

使用上面提到的 java -version 命令验证 Java 安装。

步骤 3:下载 Maven 文件

从以下网址下载 Downloading Apache Maven 3.8.1:http://maven.apache.org/download.html

目前maven的最新版本为3.8.1

步骤 4:解压 Maven 文件

解压文件到你想要的位置来安装 apache-maven-3.8.1-bin,你会得到 apache-maven-3.8.1子目录。

这里我的是d盘

操作系统 位置 (根据你的安装位置而定)
Windows D:\Environment\apache-maven-3.8.1-bin
Linux /usr/local/apache-maven
Mac /usr/local/apache-maven

步骤 5:设置 Maven 环境变量

之前在安装3.6的版本截图,现在换成3.8.1

1.首先确保电脑JDK已经安装好,进入环境变量的系统变量新建变量名MAVEN_HOME,值为刚才解压的Maven文件的路径。

2.确认后再进入到系统变量的Path新建%MAVEN_HOME%\bin

3.在cmd窗口输入mvn -v显示出版本信息则说明已经配置成功。

5.maven的目录结构

官网

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LakqM6YW-1621738735228)(https://static01.imgkr.com/temp/a3fc517115864527814a75ed766e041c.png)]

标准的maven目录结构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AwUsbFLM-1621738735229)(https://static01.imgkr.com/temp/89c49ae65b884896a88116dda8bc04dc.png)]

6.手动创建maven项目

6.1⼿动创建⼀个Maven项⽬,并编译运⾏成功!

创建⼀个⽂件夹作为项⽬的根⽬录 在根⽬录中创建⼀个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.xxxx</groupId>
    <artifactId>maven01</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>
    <name>maven01</name>
    <url>http://maven.apache.org</url>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>
标签定义解释
  1. 根⽬录下的第⼀个⼦元素 ModelVersion指定当前Pom模型的版本,对于Maven3来说,它只能是4.0.0 。指定了当 前Maven模型的版本号,对于Maven2和Maven3来说,它只能是4.0.0

  2. <groupId>定义了项⽬属于哪个组, 这个组往往和项⽬所在的组织和公司存在关联。 ⽐如: com.xxxx

  3. artifactId定义了当前Maven项⽬在组中唯⼀的ID。

  4. Version

  • X.X.X-⾥程碑

  • ⽐如:1.0.0-SNAPSHOT

  • 第⼀个X ⼤版本 有重⼤变⾰

  • 第⼆个X ⼩版本 修复bug,增加功能

  • 第三个X 更新

  1. ⾥程碑版本:
  • SNAPSHOT (快照,开发版)
  • alpha(内部测试)
  • beta(公开测试)
  • Release | RC( 发布版)
  • GA(正常版本)
  • 使⽤name标签声明⼀个对于⽤户更为友好的项⽬名称,虽然不是必须的,但还是推荐为每个Pom声明name,以⽅便信 息交流。

6.2编写主函数

package com.xxxx.demo;

public class Hello {
   
    public static void main(String[] args) {
   
        System.out.println("hello maven");
    }
}

6.3cmd 下编译并运⾏

cmd下⾯,进⼊项⽬的根⽬录

  1. 编译java⽂件 mvn compile
  2. 执⾏main ⽅法 mvn exec:java -Dexec.mainClass=“com.xxxx.demo.Hello”

注意:如果编译不成功,可能出现的问题

  • 不是使⽤管理员权限执⾏dos命令
  • 2JDK环境配置有问题,重装JDK
  • 代码编写时,类⾥⾯没设置包名(如果编译时类没加包名,执⾏时也不需要加包名)

7.关于maven的pom.xml标签超详细解释

pom作为项目对象模型。

通过xml表示maven项目,使用pom.xml来实现。

主要描述了项目:包括配置文件;开发者需要遵循的规则,缺陷管理系统,组织和licenses,项目的url,项目的依赖性,以及其他所有的项目相关因素。

<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.0http://maven.apache.org/maven-v4_0_0.xsd">
    <!--父项目的坐标。如果项目中没有规定某个元素的值,那么父项目中的对应值即为项目的默认值。 坐标包括group ID,artifact ID和 version。-->
    <parent>
        <!--被继承的父项目的构件标识符-->
        <artifactId/>
        <!--被继承的父项目的全球唯一标识符-->
        <groupId/>
        <!--被继承的父项目的版本-->
        <version/>
        <!-- 父项目的pom.xml文件的相对路径。相对路径允许你选择一个不同的路径。默认值是../pom.xml。Maven首先在构建当前项目的地方寻找父项 目的pom,其次在文件系统的这个位置(relativePath位置),然后在本地仓库,最后在远程仓库寻找父项目的pom。-->
        <relativePath/>
    </parent>
    <!--声明项目描述符遵循哪一个POM模型版本。模型本身的版本很少改变,虽然如此,但它仍然是必不可少的,这是为了当Maven引入了新的特性或者其他模型变更的时候,确保稳定性。-->
    <modelVersion>4.0.0</modelVersion>
    <!--项目的全球唯一标识符,通常使用全限定的包名区分该项目和其他项目。并且构建时生成的路径也是由此生成, 如com.mycompany.app生成的相对路径为:/com/mycompany/app-->
    <groupId>asia.banseon</groupId>
    <!-- 构件的标识符,它和group ID一起唯一标识一个构件。换句话说,你不能有两个不同的项目拥有同样的artifact ID和groupID;在某个 特定的group ID下,artifact ID也必须是唯一的。构件是项目产生的或使用的一个东西,Maven为项目产生的构件包括:JARs,源 码,二进制发布和WARs等。-->
    <artifactId>banseon-maven2</artifactId>
    <!--项目产生的构件类型,例如jar、war、ear、pom。插件可以创建他们自己的构件类型,所以前面列的不是全部构件类型-->
    <packaging>jar</packaging>
    <!--项目当前版本,格式为:主版本.次版本.增量版本-限定版本号-->
    <version>1.0-SNAPSHOT</version>
    <!--项目的名称, Maven产生的文档用-->
    <name>banseon-maven</name>
    <!--项目主页的URL, Maven产生的文档用-->
    <url>http://www.baidu.com/banseon</url>
    <!-- 项目的详细描述, Maven 产生的文档用。  当这个元素能够用HTML格式描述时(例如,CDATA中的文本会被解析器忽略,就可以包含HTML标 签), 不鼓励使用纯文本描述。如果你需要修改产生的web站点的索引页面,你应该修改你自己的索引页文件,而不是调整这里的文档。-->
    <description>A maven project to study maven.</description>
    <!--描述了这个项目构建环境中的前提条件。-->
    <prerequisites>
        <!--构建该项目或使用该插件所需要的Maven的最低版本-->
        <maven/>
    </prerequisites>
    <!--项目的问题管理系统(Bugzilla, Jira, Scarab,或任何你喜欢的问题管理系统)的名称和URL,本例为 jira-->
    <issueManagement>
        <!--问题管理系统(例如jira)的名字,-->
        <system>jira</system>
        <!--该项目使用的问题管理系统的URL-->
        <url>http://jira.baidu.com/banseon</url>
    </issueManagement>
    <!--项目持续集成信息-->
    <ciManagement>
        <!--持续集成系统的名字,例如continuum-->
        <system/>
        <!--该项目使用的持续集成系统的URL(如果持续集成系统有web接口的话)。-->
        <url/>
        <!--构建完成时,需要通知的开发者/用户的配置项。包括被通知者信息和通知条件(错误,失败,成功,警告)-->
        <notifiers>
            <!--配置一种方式,当构建中断时,以该方式通知用户/开发者-->
            <notifier>
                <!--传送通知的途径-->
                <type/>
                <!--发生错误时是否通知-->
                <sendOnError/>
                <!--构建失败时是否通知-->
                <sendOnFailure/>
                <!--构建成功时是否通知-->
                <sendOnSuccess/>
                <!--发生警告时是否通知-->
                <sendOnWarning/>
                <!--不赞成使用。通知发送到哪里-->
                <address/>
                <!--扩展配置项-->
                <configuration/>
            </notifier>
        </notifiers>
    </ciManagement>
    <!--项目创建年份,4位数字。当产生版权信息时需要使用这个值。-->
    <inceptionYear/>
    <!--项目相关邮件列表信息-->
    <mailingLists>
        <!--该元素描述了项目相关的所有邮件列表。自动产生的网站引用这些信息。-->
        <mailingList>
            <!--邮件的名称-->
            <name>Demo</name>
            <!--发送邮件的地址或链接,如果是邮件地址,创建文档时,mailto: 链接会被自动创建-->
            <post>banseon@126.com</post>
            <!--订阅邮件的地址或链接,如果是邮件地址,创建文档时,mailto: 链接会被自动创建-->
            <subscribe>banseon@126.com</subscribe>
            <!--取消订阅邮件的地址或链接,如果是邮件地址,创建文档时,mailto: 链接会被自动创建-->
            <unsubscribe>banseon@126.com
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值