对于Maven的理解

对于Maven自己的理解

1定义及其功能

对于Maven是基于项目对象模型(POM project objectmodel),可以通过一小段描述信息(配置)来管理项目的构建,报告和文档的软件项目管理工具[百度百科]
“ Apache Maven is a software project management and comprehension tool. Based on the concept of a project object model (POM), Maven can manage a project’s build, reporting and documentation from a central piece of information.”

上面这段是在官网上抄下来的其解释就是:是一个软件(特别是Java软件)项目管理及自动构建工具,由Apache软件基金会所提供。基于项目对象模型(缩写:POM)概念,Maven利用一个中央信息片断能管理一个项目的构建、报告和文档等步骤。

如果没明白maven是什么,那么上面这句话跟没说一样,我自己觉得,Maven的核心功能便是合理叙述项目间的依赖关系,通俗点讲,就是通过pom.xml文件的配置获取jar包,而不用手动去添加jar包,而这里pom.xml文件对于学了一点maven的人来说,就有些熟悉了,怎么通过pom.xml的配置就可以获取到jar包呢?pom.xml配置文件从何而来?等等类似问题我们需要搞清楚,如果需要使用pom.xml来获取jar包,那么首先该项目就必须为maven项目,maven项目可以这样去想,就是在java项目和web项目的上面包裹了一层maven,本质上java项目还是java项目,web项目还是web项目,但是包裹了maven之后,就可以使用maven提供的一些功能了(通过pom.xml添加jar包)。
我的理解就是Maven的功能就是方便了包的引入和管理问题,还有项目可以发布到tomcat供团队协作开发。

2 下面是关于Maven的基本概念

生命周期

  • maven对构建(build)的过程进行了抽象和定义,这个过程被称为构建的生命周期(lifecycle)。
  • 生命周期(lifecycle)由多个阶段(phase)组成,每个阶段(phase)会挂接一到多个goal。
  • goal是maven里定义任务的最小单元,相当于ant里的target。
  • 可以理解maven为一个插件的容器,每个插件绑定到某个goal执行

以下是官网的两个图是描述生命周期的

在这里插入图片描述在这里插入图片描述
这图我就不详细说明,如果要了解可以参考以下文档
关于Maven的生命周期描述点击这里查看(仅供参考)
下面是Maven的一些简单的操作命令

命令说明
mvn –version显示版本信息
mvn compile编译源代码,一般编译模块下的src/main/java目录
mvn package项目打包工具,会在模块下的target目录生成jar或war等文件
mvn test测试命令,或执行src/test/java/下junit的测试用例.
mvn install将打包的文件发布到远程参考,提供其他人员进行下载依赖
mvn deploy将打包的文件发布到远程参考,提供其他人员进行下载依赖

常用的命令就这些如果要了解详情就点击下面链接
https://blog.csdn.net/qq_28165595/article/details/80952714

坐标和依赖

<dependency>
	<groupId>net.sf.json-lib</groupId>
	<artifactId>json-lib</artifactId>
	<version>2.4</version>//版本号
	<type>jar</type>//打包的类型
	<classifier>jdk15</classifier>//补充的说明
</dependency>

这是一个标准坐标的写法
groupId :定义当前Maven项目隶属的实际项目。首先,Maven项目和实际项目不一定是一对一的关系。比如SpringFrameWork这一实际项目,其对应的Maven项目会有很多,如spring-core,spring-context等。这是由于Maven中模块的概念,因此,一个实际项目往往会被划分成很多模块。其次,groupId不应该对应项目隶属的组织或公司。原因很简单,一个组织下会有很多实际项目,如果groupId只定义到组织级别,而后面我们会看到,artifactId只能定义Maven项目(模块),那么实际项目这个层次将难以定义。最后,groupId的表示方式与Java包名的表达方式类似,通常与域名反向一一对应

artifactId : 该元素定义当前实际项目中的一个Maven项目(模块),推荐的做法是使用实际项目名称作为artifactId的前缀。在默认情况下,maven生成的构件,会以artifactId作为文件头,如net.sf.json-libt-2.4.jar,使用实际项目名称作为前缀,就能方便的从本地仓库找到某个项目的构件。

version : 该元素定义了使用构件的版本,如上例中net.sf.json-lib的版本是2.4,

packaging :定义Maven项目打包的方式,使用构件的什么包。首先,打包方式通常与所生成构件的文件扩展名对应,如上例中没有packaging,则默认为jar包,最终的文件名为net.sf.json-libt-2.4.jar。也可以打包成jar等。

classifier: 该元素用来帮助定义构建输出的一些附件。附属构件与主构件对应,如上例中的主构件为net.sf.json-libt-2.4.jar,该项目可能还会通过一些插件生成如net.sf.json-libt-2.4.jdk15.jar, 这样附属构件也就拥有了自己唯一的坐标。

更详细的介绍有:https://www.cnblogs.com/AlanLee/p/6156268.html
依赖范围

  • compile:编译时依赖在所有阶段都可获得,这是默认值。
  • provided: 提供的依赖范围用来编译应用程序,但无需部署。若 你用到jdk或者应用服务器提供的JAR,则使用此范围,
  • servlet APIs就属于这个依赖范围。测试时,此依赖范围也加入到classpath。
  • runtime:运行依赖范围在编译阶段是不需要的,只有在运行时需要,比如JDBC驱动程序。
  • test:测试范围依赖,仅在编译和运行单元测试时需要(比如Junit)
  • system 本地依赖,不建议使用。(nexus)

其依赖也有一些原则

Only compile and runtime scopes are transitive:只有编译时和运行时依赖可以传递
1
A->B->C
简单传递依赖:A->C
2
A->B-C(0.1)
A->C(0.2)
最短路径优先原则: A->C(0.2)
3
A->B->C(0.1)
A->E->C(0.2)
第一声明优先原则:最终依赖C(0.1)

以上就是我了解的东西希望对大家我有用

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值