一个下午对Maven的理解和感受
首先一点, 我以前从来没有使用过Maven, 没有使用过Maven, 没有使用过Maven, 更不知道Maven到底是干什么用的, 通过今天下午的一些时间, 听了老师的讲解, 有了一点儿对Maven的小小认识.
下午上课开始一来就是如何管理项目工程, 然后提到了Maven, 我就用baidu搜索了一下,baidu百科的解释是:
Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件。
Maven 除了以程序构建能力为特色之外,还提供高级项目管理工具。由于 Maven 的缺省构建规则有较高的可重用性,所以常常用两三行 Maven 构建脚本就可以构建简单的项目。由于 Maven 的面向项目的方法,许多 Apache Jakarta 项目发文时使用 Maven,而且公司项目采用 Maven 的比例在持续增长。
Maven这个单词来自于意第绪语(犹太语),意为知识的积累,最初在Jakata Turbine项目中用来简化构建过程。当时有一些项目(有各自Ant build文件),仅有细微的差别,而JAR文件都由CVS来维护。于是希望有一种标准化的方式构建项目,一个清晰的方式定义项目的组成,一个容易的方式发布项目的信息,以及一种简单的方式在多个项目中共享JARs。
从baidu百科的阐述中可以知道, Maven它就是一个可以帮助我们管理我们所开发的项目, 一个底层已经封装好了的Java应用, 我们开发者不需要关心它是怎么把整个项目整合起来的, 我们只需要把代码写好, 资源准备好,然后放到Maven官方约束好的位置,通过Maven指定的命令, 就可以将我们的项目打包成自己想要的, 这些都不需要我们自己去实现, 如果听过关于造轮子这个词语, 那么, 理解也就没那么困难了.
接着, 在老师继续讲解的过程中, 我又进入到了Maven的官方Repository网站里面, 通过他们的指导文档, 将最新版的Maven下载下来, 官方说明很简洁 比如就是Welcome to Apache Maven下面用两句就描述了什么是Maven:
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.
下载很简单, 就像平时下载JDK一样, 只需要下载它的二进制压缩包Binary zip archive即可, 如果你是要研究或者修改源代码, 你可以下载它的源代码压缩文件Source zip archive, 下载后解压到一个简单的路径下方便使用, 然后在解压后的Maven根目录可以看到Maven的README.txt文件, 其实有时候一个软件, 它的README.txt文件可以给使用者提供很多有用的信息和帮助.
在它的README.txt的第一行Apache Maven下面, 可以看到他们Apche官方给Maven的定义是(What is it?)
Apache Maven
What is it?
-----------
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.
Documentation
-------------
The most up-to-date documentation can be found at https://maven.apache.org/.
Release Notes
-------------
和之前在它们官方网站看到的一模一样, 在下面也可以看到当前版本的版本更新变化以及软件环境要求等其他相关的.
好了, 接着我开始按照老师教我们的使用步骤, 先把Maven的settings.xml文件配置一下, 例如, 将版本库localRepository配置修改为自定义的版本库, 由于默认是配置在
Default: ${user.home}/.m2/repository
目录下,所以现在在我的电脑上面的D盘根目录新建立一个目录, 名字随便取个, 我命名为MavenRepository, 将localRepository标签里面如今改为刚刚新建的目录位置即可, 由于默认是注释掉的, 所以要启用自定义路径, 需要将localRepository标签项移到注释外面, 现在修改了版本库位置, 由于构建及管理工程时还需要依赖其他第三方的一些东西, 而且中国国内的网络原因, 可能同步一些文件速度很慢, 甚至连接不到, 所以, 为了测试, 我将Mirror的一些配置换成了老师上课用的阿里源, 这样一来, 避免了网络原因带来的问题, 学习提高了效率, 这个镜像源还有很多, 依个人爱好而定.
Mirror标签中还有4个默认的子标签
1.<id>mirrorId<id>
2.<mirrorOf>repositoryId</mirrorOf>
3.<name>Human Readable Name for this Mirror.</name>
4.<url>http://my.repository.com/repo/path</url>
看名字就可以知道什么意思了, mirrorId是指明镜像源的ID, repositoryId指明版本库的ID, Human Readable Name for this Mirror表示给出一个让人可以读懂的镜像源名字, 比如我用的是阿里镜像源, 我就填入aliyunMirror, 接着就是镜像源的网络路径了,这个是根据个人使用的镜像源位置而定, 我用的阿里镜像源就写:
弄完这些之后,我开始了我的第一个测试, 在cmd里面输入老师给出的命令后(需要将Maven加入到环境变量理解才可以到处使用), 可以看到之前在D盘新建的MavenRepository目录下面下载了许多文件, 其中有一个demo项目, 这个项目完全是一个测试用的, 在将该项目运行后, 可以在cmd里面看到该项目的输出, 在此, 我认识到了Maven的大概原理, 就是一开始说的项目管理软件, 还有打包, 封装和其他许多功能, 我前面说Maven是一个Java软件, 所以, 我们就可以想到, 既然被称为软件, 那么, 肯定会有生命周期, Maven的生命周期, 在下午上课时老师也快速的讲了一下, 我只记到了开始的验证validate, 和结束的部署deploy, 中间还有许多, 有一个图可以看一下:
这让我想起了在Android Studio里写Android程序的然后构建软件包的Gradle, 因为现在Gradle越来越流行, 所以现在主流的开发都在逐渐迁移使用Gradle, 一说到Gradle, Maven和它相比就差一些, Gradle的优势我就不说了, 因为我是学习Maven, 不应该在这里说其它的. 好了,生命周期也通过图片了解到了, 然后就是依赖,继承,坐标,这些都是比较中庸的说法, 想要表达的更清晰, 可能我也不行, 百度有些解释很好, 这里就不解释了.
最后, 一个下午给我的感受就是很混乱, 我不像别个理解能力那样好, 可能需要时间来弥补效率, 所以, 在我写的时候还是有一些模糊, 含糊不清的地方, 还需要继续学习.