Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说Maven是什么?,希望能够帮助你!!!。
来源于公众号后端成长之路 ,
作者iisheng
Maven,这个单词来源于犹太语,意味着知识的积累。最初在Jakarta Turbine 项目中用来简化构造项目流程。最终,形成基于Java项目的构建和管理的工具。
安装比较简单,官网下载,配置环境即可。这里推荐一下,安装之后配置仓库镜像,可以加快访问速度。
编辑 settings.xml,在 </mirrors>之前添加
使用其他工具创建项目也如出一辙。
POM的全称是Project Object Model,用通俗点的话说就是对要构建的项目进行建模,将要构建的项目看成是一个对象(Object)。
我们可以用我们熟悉的一个Java代码来描述一下这个对象。
在Maven中一次构建过程就是一个Lifecycle,这个Lifecycle分为多个阶段,每个阶段叫做Phase。有三种构建的生命周期,分别是 default、 clean、 site。default用于部署项目, clean用于清理项目,而 site用于创建项目文档。
defaultLifecycle包含如下Phase:
清理项目产生的临时文件,一般是模块下的target目录
mvn clean
项目打包工具,会在模块下的target目录生成jar或者war等文件
mvn package
测试命令或者执行src/test/java下面的测试用例
mvn test
模块安装命令,将打包的jar或者war文件复制到本地仓库,使用-Dmaven.test.skip=true 跳过测试
mvn install
发布命令,将打包的文件发布到maven仓库
mvn deploy
maven 多个命令同时使用
mvn clean package-U -Dmaven.test.skip=true-P test
Lifecycle只规定了项目构建的流程,即先执行 validate,再 compile等一系列Phase,但并没有定义每一个Phase具体做什么。这里Phase的作用类似于Java中的接口,而Phase的具体实现在Goals里面。
一个Phase必须绑定一个或多个Goals,才能执行具体的构建流程。为了让用户不用任何配置就能使用Maven项目,Maven默认为一些核心生命周期的Phase绑定了Goals。
如果需要自定义绑定,可以在 pom.xml文件中配置。
Maven坐标主要是为了标识项目的唯一性。由下面几个属性组成:
存储管理构件(JAR、WAR等)的地方。
一般分为以下三类:
在 pom.xml配置项目依赖,比如
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
scope用来控制依赖和编译、测试、运行的classpath的关系。有下面三种关系:
Maven是通过传递依赖解析JAR包依赖,比如我项目中引入junit,在解析我的项目的时候,不仅仅仅有junit,还有junit依赖的JAR包。
假设 A->B->C->D1, E->F->D2,D1、D2 分别为 D 的不同版本。
如果 pom.xml 文件中引入了 A 和 E 之后,按照 Maven 传递依赖原则,工程内需要引入的实际 JAR 包将会有:A B C D1 和 E F D2,因此 D1、D2 将会产生包冲突。
Maven解析 pom.xml的时候,同一个JAR包只会保留一个。
对于包冲突,Maven处理策略:
继承为了消除重复。可以把很多相同的配置提取出来。
子模块通过 parent标签配置,继承父模块属性。父模块通过 dependencyManagement标签进行管理。
多模块版本号可以通过maven命令操作,在项目根目录执行
mvn versions:set-DnewVersion=0.0.2-SNAPSHOT
mvn versions:revert
mvn versions:commit
Maven多模块项目结构,以及Maven属性继承配置等,可以参考这个项目https://github.com/iisheng/mybatis-study
今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
上一篇
已是最后文章
下一篇
已是最新文章