首页 > 其他分享 >01_Maven

01_Maven

时间:2023-07-01 16:14:12浏览次数:38  
标签:maven 01 项目 仓库 jar Maven 依赖

1. Maven是什么?

Maven 翻译为"专家"、"内行",是 Apache 下的一个纯 Java 开发的开源项目(https://maven.apache.org/)。基于项目对象模型(缩写:POM)概念,Maven利用一个中央信息片断能管理一个项目的构建、报告和文档等步骤。

Maven 是一个项目开发结构管理工具,可以对 Java 项目结构、开发、构建、依赖进行统一 标准的管理。

myecplise的JavaWeb项目的结构

image

eclipse的JavaWeb项目的结构

image

idea的JavaWeb项目的结构

image

通过上面的JavaWeb项目的结构对比,我们会发现myecplise、eclipse、idea都是创建JavaWeb 项目,但是JavaWeb项目的结构确实不同的,这就给开发带来的很大的问题,比如:原来用 myeclipse开发的项目想迁移到idea中,那是不可能的,因为结构不同,同理eclipse开发的项目 也无法迁移到idea中,idea开发的项目也无法迁移到myeclipse和eclipse中。

项目结构不同,项目的开发和构建也会产生细微的差别。

所以在软件开发行业奋战多年的前辈们就在想,有没有一种方案可以解决这个问题呢?就这样 Maven就应运而生。

Maven 也可被用于构建和管理各种项目,例如 C#,Ruby,Scala 和其他语言编写的项目。 Maven 曾是 Jakarta 项目的子项目,现为由 Apache 软件基金会主持的独立 Apache项目。

2. Maven的作用(为什么要使用Maven?)

1.统一标准的项目开发构建方式

2.依赖管理:Java开发中往往除了核心的JDK之外,我们还要用到大量的第三方jar包,尤其是我 们在使用第三方框架开发时,框架本身又要依赖一堆第三方jar包,这些第三方jar包有可能还会依赖别的jar包。我们再手动处理这些依赖时往往效率低下,很头疼。

maven可以很好的解决上面的问题,它能够自动处理级联依赖,还有依赖之间版本兼容问题。并且通过依赖管理操作,开发项目时就不需要到网上专门去找jar包,再拷贝到项目中了,可以节约项目的整体大小。

3. 什么场合下会用到maven?

当我们的项目中依赖的第三方jar包很多,关系很复杂时,靠我们手工来处理几乎不可能,那么这种情况下,maven就非常适合了。

4. 安装配置maven环境

4.1 maven下载、安装

4.1.1 maven下载

下载地址:https://maven.apache.org/download.cgi

image

4.1.2 maven安装

把上面下载下来的zip包解压到你喜欢的路径下, 注意最好不要解压到有中文、空格、特殊符号的目录,避免中文乱码问题。
image

各目录结构说明:

  • bin:可执行程序目录,
  • boot:maven自身的启动加载器
  • conf:maven配置文件的存放目录
  • lib:maven运行所需库的存放目录

4.1.3 环境变量配置

将mvn解压后的bin目录的路径添加到系统的Path环境变量中。

image

之后通过cmd打开windows的命令提示窗口,执行指令mvn -v,出现如下信息表示maven安装成功。
image

4.2 maven仓库

maven仓库中主要存放的是maven管理的开发项目所需的各种依赖jar包,在开发的时候如果使用的依赖jar包没有,maven会自动下载到本地仓库中,方便我们使用。

maven仓库分为3种:

  • 中央仓库(https://repo1.maven.org/maven2/)官方仓库

    maven默认的一个远程仓库。可以理解为是一个特殊的远程仓库。

  • 远程仓库(不是官方仓库,比如阿里巴巴远程仓库)

    当首次运行maven项目时,本地仓库中空空如也,maven需要有一个地方下载我们项目中需要的所有依赖包,这个地方就是远程仓库。 一般是各个公司内部会搭建一套远程仓库

  • 本地仓库

    Windows系统,本地仓库默认路径是用户下面的.m2目录下的repository目录,如: C:\Users\John.m2\repository

各种仓库之间的关系:

  • 当开发所需的依赖jar包本地仓库没有时,会连接远程仓库查找,远程仓库没有时,会连接中央仓库查找,找到之后从中央仓库下载到远程仓库,再从远程仓库下载到本地仓库,然后进行使用。
  • 如果没有远程仓库,那本地仓库没有时,直接连接中央仓库查找,找到之后从中央仓库直接下载到本地仓库,然后进行使用。

4.3 Maven配置文件配置本地仓库

开发者要在自己电脑上使用maven开发项目,首先要做的就是配置本地仓库,在哪里配置了,这就要提到maven的配置文件了,主要分为3种:

  • 全局配置文件: %maven_home%/conf/settings.xml
  • 用户级别的配置文件:C:\Users\John.m2\settings.xml
  • 项目级别配置文件: 项目根路径下的pom.xml

一般我们在全局配置文件中进行本地仓库配置即可,用户级别的配置文件一般不用,项目级别的 配置文件会自动使用全局配置文件的配置。

image

本地仓库直接使用课程资料中提供的即可(将课程资料中的MavenRepository.zip解压到maven安装目录的同级目录即可)。

注意:本地仓库如果不配置,默认在C:\Users\John.m2\repository目录下。

4.4 maven配置阿里云远程仓库

因为Maven软件是国外工程师开发的,所以maven的中央仓库是在国外维护的,那这对于中国就不太友好了(中国外网被墙,经常连接不上国外网络),所以为了开发方便,一般我们都会配置阿里云远程仓库为maven的远程仓库,这样使用时就不会出现网络问题了。

配置阿里云镜像有两种方式: 修改全局配置文件或者项目中pom.xml

  • 第一种方式:修改全局配置

    在maven安装目录下的conf目录下,找到settings.xml,在标签下添加如下内容:

    <mirror>
        <id>central</id>
        <name>aliyun maven</name>
        <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
        <mirrorOf>central</mirrorOf>
    </mirror>
    
  • 第二种方式: 修改项目的pom.xml,在其中添加(不推荐)

    <repositories>
        <repository>
            <id>alimaven</id>
            <name>aliyun maven</name>
            <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
            <releases>
            	<enabled>true</enabled>
            </releases>
            <snapshots>
            	<enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>
    

    至此maven的基本配置就完成了。

5. Maven的生命周期及基本命令(了解)

5.1 Maven的生命周期

当然maven的生命周期不止这一套,总共分为3套,每套里面包含的事件如下:

(1)clean生命周期:清理工作

pre-clean:执行一些在clean之前的工作

clean:移除上一次构建产生的所有文件

post-clean:执行一些在clean之后立刻完成的工作

(2)default生命周期:核心工作,例如编译,测试,打包,部署等

image

对于default生命周期,每个事件在执行之前都会将之前的所有事件依次执行一遍

(3)site生命周期:产生报告,发布站点等

pre-site:执行一些在生成站点文档之前的工作

site:生成项目的站点文档

post-site:执行一些在生成站点文档之后完成的工作,为部署做准备

site-deploy:将生成的站点文档部署到特定的服务器上

5.2 Maven的基本命令

进入到需要构建的maven项目的根目录中,通过cmd打开的命令提示窗口可以执行如下命令进行 maven项目的构建。

image

6. 在开发工具中使用maven

eclipse中配置Maven

1.打开设置面板,选择maven设置项

image

2.选择自己安装的maven
image

3.启用刚才配置的maven

image

eclipse中创建Maven项目

  1. 新建工程选择maven project

image

image

  1. 选择项目骨架模板

    1)JavaSE工程建议选择 maven-archetype-quickstart

    2)JavaWeb工程建议选择 maven-archetype-webapp

image

  1. 填写项目三要素: groupId、artifactId、version

image

包名会自动根据groupId和ArtifactId来生成,我们也可以自己修改

IDEA中配置Maven

1.打开IDEA设置面板

image

2.找到maven设置项,修改如下地方

image

image

IDEA中创建Maven工程

1.文件 -> 项目 -> Maven

2.设置创建项目所需的JDK,设置创建项目使用的模板(不使用模板,默认创建就是JavaSE项目)

image

3.设置组ID(groupid)、工件ID(ArtifactId)、版本(version)

image

4.设置maven信息,一般idea会自动配置好

image

注意如果提示是否要开启自动导入,要开启。

image

5.创建Maven项目工程成功,补充代码编写目录

使用模板构建Maven项目有一个问题就是代码编写目录是不会自动创建的,需要我们手动创建。 在src\main目录下创建java和resources目录,并标记为maven项目资源目录。
image

在src下创建test目录,再在test目录下创建java和resources目录,并标记为maven项目测试资 源目录。

image

创建成功的Maven项目的整体目录

image

7. Maven的目录结构

  • JavaSE

image

  • JavaWeb

image

8. POM文件

POM( Project Object Model,项目对象模型 ) 是 Maven 工程的基本工作单元是一个XML文件,包含了项目的基本信息,用于描述项目如何构建,声明项目依赖jar,等等。

执行任务或目标时,Maven 会在当前目录中查找 POM。它读取 POM,获取所需的配置信息, 然后执行目标。

我们经常需要打交道的就是这个pom.xml文件。

POM 中可以指定以下配置:

  • 项目坐标
  • 自定义properties
  • 项目打包方式
  • 添加依赖
  • 管理依赖
  • 构建
    • 添加插件
    • 插件管理
  • 项目构建 profile
  • 项目开发者列表(不重要)
  • 相关邮件列表信息(不重要)

8.1 指定打包方式

通过packaging标签指定maven项目的打包方式

<packaging>jar</packaging>

取值一般有如下三种

(1)jar:该资源打成jar包,默认是jar,javase项目。

(2)war:该资源打成war包,web项目。

(3)pom:该资源是一个父资源(表明使用maven分模块管理),打包时只生成一个pom.xml 不生成jar或其他包结构,聚合和继承时使用。

8.2 Maven中的Properties

properties标签一般用于自定义属性或者设置内置属性。

maven中的properties标签有两种

  • 自定义属性

    通常用来统一管理版本,在 < dependencies > 标签中配置依赖时可以通过${自定义属性}来 引用标签中定义的属性

    <properties>
    	<junit.version>4.12</junit.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
    
  • 内置属性

    内置属性的定义方式和自定义属性一样,但是不需要我们显示去使用,maven会自动读取。 通常用来指定项目编码、编译版本等

    <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>
    </properties>
    

8.3 maven工程坐标

在Maven中,坐标是Jar包的唯一标识,Maven通过坐标在仓库中找到项目所需的Jar包。

image

如下代码中,groupId和artifactId构成了一个Jar包的坐标。

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.11</version>
    <scope>test</scope>
</dependency>
  • groupId:定义当前资源隶属组织名称(通常是域名反写,如:org.mybatis; com.aaaa)
  • artifactId:定义当前资源的名称(通常是项目或模块名称,如:crm,sms)
  • version:定义当前资源的版本号

maven工程的三要素就是一个项目在maven仓库中的唯一坐标,决定了我们再添加依赖时能够定位到一个唯一的jar包。

8.4 添加依赖

在maven的pom.xml中,依赖的管理通过标签来管理,该标签下可以出现一个或多个子标签。

一个标签代表一个依赖。 具体来说配置方式:

具体来说配置方式:

<dependency>
    <groupId>javax.servlet.jsp</groupId>
    <artifactId>jsp-api</artifactId>
    <version>2.2</version>
    <scope>provided</scope>
</dependency>

我们添加完上面的配置以后,maven会将c3p0及相关的依赖自动添加到项目的构建路径下

如果不知道一个依赖jar包的坐标,可以通过https://mvnrepository.com/查找。

8.5 maven中依赖的Scope

scope表示依赖的作用范围

maven中的scope有:

  • test
  • compile(默认)
  • runtime
  • provided
  • system
  • import

image

8.6 传递依赖与排斥依赖

  • 传递依赖:如果我们的项目引用了一个Jar包,而该Jar包又引用了其他Jar包,那么在默认情况下项目编译时,Maven会把直接引用和间接引用的Jar包都下载到本地。

  • 排除依赖:如果我们只想下载直接引用的Jar包,那么需要在pom.xml中做如下配置:(将需要排除的Jar包的坐标写在中)

    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.11</version>
        <scope>test</scope>
        <!-- 排除依赖 -->
        <exclusions>
            <exclusion>
                <groupId>org.hamcrest</groupId>
                <artifactId>hamcrest-core</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    

8.7 配置tomcat插件

之前构建的Web项目,需要部署到tomcat中才能运行访问,Maven构建的web项目就不用这么麻烦了,Maven提供了tomcat插件,配置之后就可以直接运行项目了。

<build>
    <!-- 构建tomcat插件 -->
    <plugins>
    <plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat7-maven-plugin</artifactId>
        <!-- 项目端口和访问路径设置 -->
        <configuration>
            <port>8081</port>
            <path>/maven</path>
            <uriEncoding>utf-8</uriEncoding>
        </configuration>
        <version>2.2</version>
        </plugin>
    </plugins>
</build>

image

标签:maven,01,项目,仓库,jar,Maven,依赖
From: https://www.cnblogs.com/jiabaolatiao/p/17519414.html

相关文章

  • 算法学习day03链表part01-203、707、206
    packageSecondBrush.LinkedList.LL1;/***203.移除链表元素*删除链表中等于给定值val的所有节点。*自己再次概述一下这个过程:*1.移除元素,要采用设置虚拟节点的方式,因为那样不需要考虑头结点问题*2.设置两个虚拟指向*3.移除元素就是遍历链表,然后碰到目标值......
  • 【题解】#373. 「USACO1.1」Friday the Thirteenth 题解(2023-07-01更新)
    #373.「USACO1.1」FridaytheThirteenth题解题目传送门欢迎大家指出错误并联系这个蒟蒻更新日志2023-02-0117:20文章完成2023-02-0318:50文章审核通过2023-02-0319:17修改了注释2023-05-2520:25修改了$\LaTeX$2023-05-2520:32再次修改了$\LaTeX$,感谢ACRU......
  • 【题解】#105. 「USACO1.3」Ski Course Design 题解(2023-07-01更新)
    #105.「USACO1.3」SkiCourseDesign题解题目传送门欢迎大家指出错误并联系这个蒟蒻更新日志2023-02-0117:20文章完成2023-02-0316:09文章审核通过2023-02-0422:15修改了注释2023-05-1621:44修改了$\LaTeX$2023-07-0115:59修改了代码题目知识点模拟+搜索......
  • 【题解】#68. 「NOIP2004」津津的储蓄计划 题解(2023-07-01更新)
    #68.「NOIP2004」津津的储蓄计划题解题目传送门欢迎大家指出错误并联系这个蒟蒻更新日志2023-02-0117:20文章完成2023-02-0316:09文章审核通过2023-02-0422:15修改了注释2023-05-2709:27修改了$\LaTeX$2023-07-0115:45修改了代码题目知识点模拟题目分析......
  • C/C++《数据结构课程设计》题目[2023-07-01]
    C/C++《数据结构课程设计》题目[2023-07-01]《数据结构课程设计》题目一、【大数四则运算】——线性表[习题描述]设计—个实现任意长的整数进行四则运算和幂次运算的演示程序。[基本要求]利用双向循环链表实现大数的存储,每个结点含一个整型变量。[实现提示]实现原理:任何一......
  • SFP3012A-ASEMI代理海矽美快恢复二极管SFP3012A
    编辑:llSFP3012A-ASEMI代理海矽美快恢复二极管SFP3012A型号:SFP3012A品牌:MHCHXM(海矽美)芯片个数:单芯片封装:TO-247恢复时间:≤75ns工作温度:-40°C~175°C浪涌电流:300A*1正向电流:30A反向耐压:1200V正向压降:2.2V~2.4V引脚数量:2SFP3012A特性:ASEMI代理的海矽美品牌SFP3012A是采用工艺芯片,该芯......
  • 参考资料------ 快速使用Python-Tkinter设计界面 方法与代码-20230701
    作者:干饭小熊猫链接:https://www.zhihu.com/question/68663671/answer/2519875621来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 1简介1.1Tkinter是什么?Tkinter是Python自带的GUI库,Python的IDEL就是Tkinter的应用实例。Tkinter可以看作是Tk......
  • SFP3012A-ASEMI代理海矽美快恢复二极管SFP3012A
    编辑:llSFP3012A-ASEMI代理海矽美快恢复二极管SFP3012A型号:SFP3012A品牌:MHCHXM(海矽美)芯片个数:单芯片封装:TO-247恢复时间:≤75ns工作温度:-40°C~175°C浪涌电流:300A*1正向电流:30A反向耐压:1200V正向压降:2.2V~2.4V引脚数量:2SFP3012A特性:ASEMI代理的海矽美品牌SFP3012A是......
  • 使用Gitee或GitHub托管Maven仓库JAR包的便捷方法
    原文地址:https://ntopic.cn/p/2023062201/我开源的JAR包的Gitee和GitHub托管的Maven仓库:Gitee托管仓库:https://gitee.com/obullxl/maven-repositoryGitHub托管仓库:https://github.com/obullxl/maven-repository背景说明在上一篇博客中,我们介绍了开源通用高性能分布式id序列......
  • SFP3012-ASEMI代理MHCHXM(海矽美)快恢复二极管SFP3012
    编辑:llSFP3012-ASEMI代理MHCHXM(海矽美)二极管SFP3012型号:SFP3012品牌:MHCHXM(海矽美)封装:TO-247AB恢复时间:≤65ns正向电流:30A反向耐压:1200V芯片个数:双芯片引脚数量:3类型:快恢复二极管特性:快恢复、大电流浪涌电流:160A*2正向压降:1.75V~2.2V封装尺寸:如图工作温度:-40°C~175°CSFP3012特性超......