Maven是什么?Maven的概念+作用+仓库的介绍+常用命令的详解

Maven系列1

1.什么是Maven?

Maven是一个项目管理工具,它包含了一个对象模型。一组标准集合,一个依赖管理系统。和用来运行定义在生命周期阶段中插件目标和逻辑。
核心功能
Maven的核心功能是合理叙述项目间的依赖关系,通俗点 就是通过pom.xml文件的配置获取jar包不用手动的去添加jar包,,这个pom.xml包我后面会叙述,不过已经学习过maven的 人应该对这个很熟悉。其本质就是通过配置pom.xml来获取jar包,当然这是在该项目必须是maven项目的前提下。那么什么是maven项目
maven项目是啥?
我们这样来理解maven项目,就是在java项目和web项目上裹了一层maven,本质上java项目还是java项目,web项目还是web项目,但是包裹了maven之后,就可以使用maven提供的一些功能,即通过pom.xml添加jar包
就像在蜜汁鸡外面裹了一层面粉油炸一下变成了炸鸡,但是他还是一只鸡

2.Maven能够解决什么问题

在想Maven可以解决什么问题之前我们先来想想我们开发过程中经常遇到什么问题
1、我们需要引用各种 jar 包,尤其是比较大的工程,引用的 jar 包往往有几十个乃至上百个, 每用到一种 jar 包,都需要手动引入工程目录,而且经常遇到各种让人抓狂的 jar 包冲突,版本冲突。
2、我们辛辛苦苦写好了 Java 文件,可是只懂 0 和 1 的白痴电脑却完全读不懂,需要将它编译成二进制字节码。好歹现在这项工作可以由各种集成开发工具帮我们完成,Eclipse、IDEA 等都可以将代码即时编译。当然,如果你嫌生命漫长,何不铺张,也可以用记事本来敲代码,然后用 javac 命令一个个地去编译,逗电脑玩。
3、世界上没有不存在 bug 的代码,计算机喜欢 bug 就和人们总是喜欢美女帅哥一样。为了追求美为了减少 bug,因此写完了代码,我们还要写一些单元测试,然后一个个的运行来检验代码质量。
4、再优雅的代码也是要出来卖的。我们后面还需要把代码与各种配置文件、资源整合到一起,定型打包,如果是 web 项目,还需要将之发布到服务器,供人蹂躏。
maven所帮助我们解决的问题
以上的这些问题maven都把我们解决了,没错maven可以帮我们
1构建工程,
2管理jar,
3.编译代码,
4.自动运行单元测试,
5.打包
6.生成报表,
7.部署项目,生成web站点。
有没有孙悟空得到金箍棒的感觉

3.接下来我就举个例子让大家先见识见识maven的功能

前面我们通过web阶段的项目,要能够将项目运行起来,就必须将该项目所依赖的一些jar包添加到工程中,否则项目就不可以运行了,如果相同架构的项目有十几个,那么我们就需要将这一份jar包复制到十个不同的工程中我们一起来看看CRM工程的大小
使用传统的CRM项目

使用maven构建

4.Maven的依赖管理

为什么使用maven之后文件夹就如此之小了呢?其实这我们在前面就提到过了即通过配置pom.xml的文件来配置依赖,而Maven的一个核心特征就是依赖管理,当我们涉及到多模块的项目(包含成百个模块或者子项目),管理依赖就变成了一个极为困难的任务Maven展示出了他对处理这种情形的高度控制
传统的web项目中,我们必须将工程所依赖的jar包复制到工程中,导致工程变的很大,那么maven是如何通过操作使工程变少的呢

通过图解可以发现maven工程不直接将jar包导入到工程中,而是通过再pom.xml中添加所需的jar包的坐标,这样就避免了jar直接引入进来,在需要用到jar包的时候,只要查找pom.xml文件,再通过pom.xml中的坐标,到一个专门用于存放jar包的仓库中根据坐标从而找到这些jar包,再把这些jar包拿去运行
看到这读者们可能会有疑问
1.存放jar包的仓库长什么样?
这个我们会在后面一一讲解,仓库也分为许多种类
2.通过读取pom.xml坐标,来找jar的方式会不会导致速度很慢。从而导致这些方案不可行
通过 pom.xml 文件配置要引入的 jar 包的坐标,再读取坐标并到仓库中加载 jar 包,这
样我们就可以直接使用 jar 包了,为了解决这个过程中速度慢的问题,maven 中也有索引的概念,通过建立索引,可以大大提高加载 jar 包的速度,使得我们认为 jar 包基本跟放在本地的工程文件中再读取出来的速度是一样的。这个过程就好比我们查阅字典时,为了能够加快查找到内容,书前面的目录就好比是索引,有了这个目录我们就可以方便找到内容了,一样的在 maven 仓库中有了索引我们就可以认为可以快速找到 jar 包。

5.仓库的概念

仓库就是存放jar包的地方,即我们前面说的通过pom.xml中通过设置索引来到仓库中寻找jar包
仓库分为:本地仓库,第三方仓库,中央仓库

5.1本地仓库
用来存储从远程仓库或者中央仓库下载的插件和jar包,项目使用一些插件或jar包
优先从本地仓库查找
默认本地仓库的位置在${user.dir}/.m2/repository,${user.dir}表示 windows 用户目录。

5.2第三方仓库
d第三方仓库,又称为内部中心仓库,又称为私服
私服:一般由公司自己设立,只为本公司内部共享使用,它既可以作为公司内部构建协作和存档,也可作为公用类库镜像缓存,减少在外部访问和下载的频率使用私服为了减少对中央仓库的访问私服可以使用的是局域网,中央仓库必须使用外网。也就是一般公司都会创建这种第三方仓库,保证项目开发时,项目所需用的jar都从该仓库中拿,每个人的版本就都一样。
注意:连接私服,需要单独配置。如果没有配置私服,默认不使用

5.3中央仓库
在 maven 软件中内置一个远程仓库地址 http://repo1.maven.org/maven2 ,它是中央仓库,服务于整个互联网,它是由 Maven 团队自己维护,里面存储了非常全的 jar 包,它含了世界上大部分流行的开源项目构件。

获取jar包的过程
优先从本地仓库查找,如果本地仓库没有该jar包,如果配置了私服,就从私服中查找,私服中没有就从中央仓库中查找,然后下载到本地仓库,下次使用就可以直接从本地仓库中查找,没有配置私服则,直接从中央仓库中查找

6.Maven java项目结构

Maven工程目录结构

图中有一个target目录,是因为将该java项目进行了编译,src/main/java下的源代码就会编译成.class文件放入target目录中,target就是输出目录。
作为一个 maven 工程,它的 src 目录和 pom.xml 是必备的。
进入 src 目录后,我们发现它里面的目录结构如下:

项目名称
--pom.xml 核心配置,项目根下
--src
--main
--java java源码目录
--resources java配置文件目录
--test
--java 源码测试目录
--resource 测试配置目录

7.maven的常用命令

7.1 compile
compile是maven工程的编译命令,作用是将 src/main/java 下的文件编译为 class 文件输出到 target
目录下。
7.2 test
test是maven工程的测试命令,会执行 src/test/java 下的单元测试类。
cmd 执行 mvn test 执行 src/test/java 下单元测试类,下图为测试结果,运行 1 个测试用例,全部成功。
7.3 clean
clean是maven工程的清理命令,执行clean会删除target目录及其内容
7.4 package
package是maven工程的打包命令,对于java工程执行 package 打成 jar 包,对于 web 工程打成 war
包。
7.5 install
install 是 maven 工程的安装命令,执行 install 将 maven 打成 jar 包或 war 包发布到本地仓库。
从运行结果中,可以看出:当后面的命令执行时,前面的操作过程也都会自动执行

8.maven的生命周期

maven对项目构建过程分为三套相互独立的生命周期,这里说的三套而且是相互独立,
这三套分别是:
Clean Lifecycle :在进行真正的构建之前进行一些清理工作。
Default Lifecycle :构建的核心部分,编译,测试,打包,部署等等。
Site Lifecycle :生成项目报告,站点,发布站点。

9.maven的概念模型

Maven 包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project
Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段
(phase)中插件(plugin)目标(goal)的逻辑。

9.1项目对象模型:
一个maven工程都有一个pom.xml文件。通过pom.xml文件定义项目的坐标,项目的依赖,项目的信息
插件目标等

9.2依赖管理系统:
通过 maven 的依赖管理对项目所依赖的 jar 包进行统一管理。
比如:项目依赖 junit4.9,通过在 pom.xml 中定义 junit4.9 的依赖即使用 junit4.9,如下所示是 junit4.9
的依赖定义:

<!-- 依赖关系 -->
<dependencies>
<!-- 此项目运行使用 junit,所以此项目依赖 junit -->
<dependency>
<!-- junit 的项目名称 -->
<groupId>junit</groupId>
<!-- junit 的模块名称 -->
<artifactId>junit</artifactId>
<!-- junit 版本 -->
<version>4.9</version>
<!-- 依赖范围:单元测试时使用 junit -->
<scope>test</scope>
</dependency>

9.3 一个项目的生命周期
使用maven完成项目的构建,项目构建包括:清理,编译,部署等过程,maven将这些过程规范为一个生命周期,如下所示是生命周期的各阶段

maven 通过执行一些简单命令即可实现上边生命周期的各各过程,比如执行 mvn compile 执行编译、
执行 mvn clean 执行清理。

9.4 一组标准集合
maven将整个项目管理过程定义为一组标准集合,比如通过maven构建工程有标准的目录结构,有标准的生命周期阶段,依赖管理有标准的坐标定义

9.5 插件目标

maven管理项目生命周期都是基于插件完成的

10.使用idea开发meven项目

这个就是几个简单的参数配置一下没什么东西讲,我就放个流程图好了

1.

2.

3.

6.

7.


8.

9.

10.

11.

11.获取jar包方式

到中央仓库的官网上去下载
网址:
http://search.maven.org/
http://mvnrepository.com/

例图:

以上就是maven的一些基础知识,后续我会更新更高阶的maven知识
,即我们在项目中经常使用到的。

到此这篇关于Maven是什么?Maven的概念+作用+仓库的介绍+常用命令的文章就介绍到这了,更多相关Maven常用命令内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 使用Maven tomcat:run命令启动web项目时修改默认端口的方法

    在使用maven时,修改插件tomcat启动端口.一开始我在pom.xml配置文件里面修改,如下面所示: <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.2</version> <configuration> <port>9999&

  • maven的生命周期及常用命令介绍

    maven简介及优势 maven是一个项目构建和管理的工具,提供了帮助管理 构建.文档.报告.依赖.scms.发布.分发的方法.可以方便的编译代码.进行依赖管理.管理二进制库等等.maven的好处在于可以将项目过程规范化.自动化.高效化以及强大的可扩展性利用maven自身及其插件还可以获得代码检查报告.  单元测试覆盖率.实现持续集成等等. maven优势: 1.项目自动化编译部署 2.项目jar包的依赖管理 3.项目的插件管理 Maven是围绕着构建生命周期的核心概念为原型,整个项目的创建和部

  • maven中下载jar包源码和javadoc的命令介绍

    1:Maven命令下载源码和javadocs 当在IDE中使用Maven时如果想要看引用的jar包中类的源码和javadoc需要通过maven命令下载这些源码,然后再进行引入,通过mvn命令能够容易的达到这个目的: 复制代码 代码如下: mvn dependency:sources mvn dependency:resolve -Dclassifier=javadoc 命令使用方法:首先进入到相应的pom.xml目录中,然后执行以上命令: 第一个命令是尝试下载在pom.xml中依赖的文件的源代码

  • 调用maven命令的BAT脚本分享

    最近遇到一个问题,因为有一大堆本地库需要安装,之前采用的depedency方式为system,因为无法在package的时候自动引入. <dependency> <groupId>org.zhixun</groupId> <artifactId>IKAnalyzer</artifactId> <version>1.0</version> <scope>system</scope> <syste

  • IDEA 重新导入依赖maven 命令 reimport的方法

    Intellj 的自动载入maven功能有时候很好用,但是有时候会碰到很多问题,导致pom文件修改却没有触发自动重写载入.此时需要手动强制更新依赖: 1. 手动删除Project Setting 里面的libraries 包 2. 在Maven Project点击clean功能,删除之前编译过得文件 3. 项目右键 --> maven --> Reimport 总结 到此这篇关于IDEA 重新导入依赖maven 命令 reimport的文章就介绍到这了,更多相关idea maven 命令 re

  • Maven是什么?Maven的概念+作用+仓库的介绍+常用命令的详解

    Maven系列1 1.什么是Maven? Maven是一个项目管理工具,它包含了一个对象模型.一组标准集合,一个依赖管理系统.和用来运行定义在生命周期阶段中插件目标和逻辑. 核心功能 Maven的核心功能是合理叙述项目间的依赖关系,通俗点 就是通过pom.xml文件的配置获取jar包不用手动的去添加jar包,,这个pom.xml包我后面会叙述,不过已经学习过maven的 人应该对这个很熟悉.其本质就是通过配置pom.xml来获取jar包,当然这是在该项目必须是maven项目的前提下.那么什么是m

  • Docker私有仓库Harbor介绍和部署方法详解

    Docker容器应用的开发和运行离不开可靠的镜像管理,虽然Docker官方也提供了公共的镜像仓库,但是从安全和效率等方面考虑,部署我们私有环境内的Registry也是非常必要的.这里介绍一款企业级Docker镜像仓库Harbor的部署和使用,在Kubernetes集群中,推荐使用Harbor仓库环境. 一.Harbor仓库介绍 我们在日常Docker容器使用和管理过程中,渐渐发现部署企业私有仓库往往是很有必要的, 它可以帮助你管理企业的一些敏感镜像, 同时由于Docker Hub的下载速度和GF

  • Android源代码仓库及其管理工具Repo分析详解

    软件工程由于需要不断迭代开发,因此要对源代码进行版本管理.Android源代码工程(AOSP)也不例外,它采用Git来进行版本管理.AOSP作为一个大型开放源代码工程,由许许多多子项目组成,因此不能简单地用Git进行管理,它在Git的基础上建立了一套自己的代码仓库,并且使用工具Repo进行管理.工欲善其事,必先利其器.本文就对AOSP代码仓库及其管理工具repo进行分析,以便提高我们日常开发效率. <Android系统源代码情景分析>--点击下载 现代的代码版本管理工具,SVN和Git是最流行

  • Spring中AOP概念与两种动态代理模式原理详解

    目录 1.概念 1.AOP技术简介 2.AOP的优势 3.Spring AOP术语 4.AOP 开发明确的事项 2.AOP底层实现 1.AOP 的动态代理技术: 3.基于cglib的动态代理代码 总结 1.概念 1.AOP技术简介 AOP 为Aspect Oriented Programming 的缩写,意思为面向切面编程,是通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术. AOP 是 OOP 的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一

  • maven仓库repositories和mirrors的配置及区别详解

    maven仓库配置 仓库优先级为:本地仓库(localRepositories) > profile中的repositories仓库 > POM > mirrors全局仓库 通过mirror配置 如果仓库X可以提供仓库Y所有的内容,那么我们就可以认为X是Y的一个镜像,通俗点说,可以从Y获取的构件都可以从他的镜像中进行获取.可以采用镜像的方式配置远程仓库,镜像在settings.xml中进行配置,在setting.xml中的<mirrors>标签下加入如下子标签配置便配置了一个

  • 详解maven的install的作用

    一,使用eclipse 1,maven的install可以将项目本身编译并打包到本地仓库,这样其他项目引用本项目的jar包时不用去私服上下载jar包,直接从本地就可以拿到刚刚编译打包好的项目的jar包,很灵活,避免每次都需要重新往私服发布jar包的痛苦: 2,修改服务端比如manage层和dao层的项目的时候如果eclipse没有自动编译,则在调试的时候容易出很奇怪的错误,就是明明代码已经改好了,但是debug的时候还是在报错,这就是没有项目没有编译完成造成的,看到的改好的代码没有变成class

  • Maven继承与聚合详解及作用介绍

    目录 一.继承 引言 1. 继承关系的实现 2. 依赖配置 二.聚合 引言 实现聚合 三.继承与聚合的合并 一.继承 引言 继承关系可以对不同模块的依赖版本做统一管理,因为子模块中的依赖基本都继承于父模块,父模块中指定哪个版本,子模块就继承哪个版本,可以有效避免不同模块可能采用不同版本的依赖时产生的冲突 1. 继承关系的实现 (1)parent 模块设置 parent 模块即父模块,由于父模块只是为了给子模块提供依赖,所以父模块中只需要一个 pom.xml 文件即可.父模块的打包方式必须设置为

  • 详解如何将本地JAR包添加到本地Maven仓库中

    详解如何将本地JAR包添加到本地Maven仓库中 有些时候,当我们需要在自己的maven工程中添加一个确定的jar而发现Maven中央仓库不存在时,但是我们自己手上有这些需要的jar包,那么我们可以自给自足,把这个jar包添加到我们的自己的maven仓库中,这样方便在maven工程中引用. 比如sqljdbc.jar在Maven中央仓库中找不到,但是我们的maven工程中确实需要这样的一个jar包,那么我们首先需要下载对应版本的sqljdbc.jar包到本地,然后按照以下的命令添加到本地仓库.(

  • Maven默认中央仓库(settings.xml 配置详解)

    Maven的安装 安装Maven之前要确保已经安装好了jdk,并且配置好了环境变量JAVA_HOME.具体安装步骤如下: 1. 从apache网上下载maven项目的压缩包.下载地址为:http://maven.apache.org/download.html.比如现在最新的Maven版本是3.0.4,那么我下载好的安装文件就是apache-maven-3.0.4.zip. 2. 将下载后的压缩包解压到Maven的安装目录,比如说是D:\\develop,那么解压后就是D:\\develop\\

  • 详解如何将JAR包发布到Maven中央仓库

    将jar包发布到Maven中央仓库(Maven Central Repository),这样所有的Java开发者都可以使用Maven直接导入依赖,例如fundebug-java: <!-- https://mvnrepository.com/artifact/com.fundebug/fundebug-java --> <dependency> <groupId>com.fundebug</groupId> <artifactId>fundebu

随机推荐