Maven初始

来源:互联网 发布:网络分析仪器 编辑:程序博客网 时间:2024/06/10 00:06


系列博客:

1·《Maven学习总结1——坐标》

2·《Maven学习总结2——依赖》

3·《Maven学习总结3——聚合和继承》


在系列博客之前,先来一下宏观的介绍。先来看思维导图:

一:是什么

1·概念

Apache Maven是一个软件项目管理工具。基于项目对象模型(POM)的概念Maven可提供三大方面的功能,

·项目构建

·依赖管理

·项目信息管理

我们项目中主要应用了前两点,项目构建和依赖管理。

2·安装注意事项

重点说一下第二点:配置用户范围的settings.xml。如果是个人笔记本,这可设可不设,即使用全局的setting文件也ok。配置用户范围的setting,目的是为了不影响其它用户的正常使用。

二:为什么使用

在构件方面,就要和其他工具相对比了。比如IDE,MakeAntgradle。除了gradle现在和maven不相上下外,剩下的都被逐渐遗弃。至于用maven还是gradle,都可以。

另外是依赖管理方面,同样我认为mavengradle都可以选择,这里主要介绍maven

三:核心概念

1·坐标

坐标,显而易见,根据坐标就可确定一个点的具体位置,同样,在maven的配置中,通过groupId,artifactId,version同样可以具体的精确到一个jar构件的位置。这样存在的意义我认为:是通过你的配置,远成仓库亦或本地仓库可根据坐标将相应的jar供你使用。本项目中并无真正的依赖存在。

2·生命周期&插件

生命周期在maven中是一个抽象概念,看不见摸不着的一个东西。命令行的输入往往就对应了生命周期,如mvn package就表示执行默认生命周期阶段package。在我看来,生命周期正是构建过程中的一一对应,其实际行为都是有插件来完成。生命周期和插件两者协同工作。两者密不可分。这也正是maven给我们所提供的构建工具职能。

3·依赖

依赖的基本配置不再详细说明。

依赖范围控制依赖与三种classpath(编译classpath,测试classpath,运行classpath)的关系。其中依赖范围通过标签scope值决定。

传递性依赖就是A依赖B,且B依赖C

强调一点的是:maven的最佳实践中,有些东西看起来貌似冗余,但是给我们的管理却带来了无限的方便之处。

4·聚合和继承

聚合:帮助聚合其它模块构建的工具,并无实质内容。

继承:抽取重复的配置,但不是说这样就可以把公共依赖的jar包向上抽取,子模块不再显示声明。这样不符合maven的最佳实践,具体详见系列博客中《maven依赖》。

抛出一个问题,具体博客中给出我的理解:

·在父pom文件中只声明依赖的版本信息,不进行对依赖的声明,在各自的子模块中依赖自己需要依赖的jar包,版本信息通过父pomproperties变量,这样ok吗?

5·仓库

仓库这个概念也真是一点点理解透彻的哈。

仓库分为本地仓库和远成仓库。自己本地安装的maven属于本地仓库;maven提供的中央仓库,第三方仓库以及局域网中搭建的私服,我们都可称之为远程仓库。

疑问:既然maven给我们提供了中央仓库,为何我们还要搭建局域网中的私服呢?

原因如下:

·节省外网带宽

·加速maven构建

·部署第三方构件

·提高稳定性,增强控制

·降低中央仓库的负荷

  

6·设计理念

maven提倡“约定优于配置”,这是maven最核心的设计理念之一。比如,maven会假设用户的项目是这样的:

·源码目录:src/main/java

·编译输出目录:target/classes

·打包方式为jar

·包输出目录为target

遵循约定虽然损失了一定的灵活性,用户不能随意安排目录结构,但是确定减少配置。更重要的是,遵循约定能够帮助用户遵守构建标准。

四:怎样使用

很简单,两句话,首先遵循maven的约定大于配置的原则,按照最佳实践就ok了。貌似说的废话,但实践后就会知道,其实就是这样的。


原创粉丝点击