前段时间给公司说了自己想倒腾下服务端技术,上个版本简单些了三个接口。这个版本没想到幸福来得这么快,直接叫我上手服务端开发。现在有点后悔了,😭😭。当初不装逼就不用这样又做服务端又做客户端的了。
今天对Maven做个简单总结
Maven?
要弄懂一样东西是做什么用的,做直接的方式就是看官方介绍(Google,Baidu):
官方介绍:
- 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.
类比于iOS中,就对应到我们常用的Cocoapods
。用得最多的就是包的依赖管理。但功能却比iOS开发中的Cocoapod
牛逼多了。
经常和Maven
出现在一起的还有一个开源工具名叫Ant
。同样是Apache
门下的。
Ant
和Maven
最大的不同在于Ant
是构建工具,Maven
一般用于包管理及项目编译。顺便提一下还有一个常见的构建工具那就是Make
。不同之处在于Make
更多应用于c/c++
,Ant
更多应用于Java
。现在一般都是用Maven就可以了。
来看看Maven
可以做哪些事情:
- 项目构建
- 文档管理
- 生成测试报告
- 解决项目间依赖项
- 源代码版本管理
- 项目Releases
- 项目的分发
专用名词
在使用idea
创建Maven
项目的时候,会让你输入项目名称之类的。比如:
这里总结一下。
名词 | 作用 |
---|---|
Project | 任何你想 build 的事物,Maven都会把它们当作是一个 Project。这些 Project 被定义为 POM(Project Object Model)。一个 Project 可以依赖其他的project,一个 project 也可以有多个子project组成。 |
POM | POM(pom.xml) 是 Maven 的核心文件,它是指示 Maven 如何工作的元数据文件,类似 ant 的 build.xml 文件。pom.xml 文件应该位于每个 Project 的根目录。 |
GroupId | 顾名思义,这个应该是公司名或组织名。 |
ArtifactId | 构建出来的文件名,一般来说或,这个也是project名。 |
Packaging | 项目打包的类型,可以是将jar、war、rar、ear、pom,默认是jar。 |
Version | 项目的版本,项目的唯一标识由 groupId+artifactId+packaging+versionz 组成。 |
Dependency | 为了能够 build 或运行,一个典型的java project会依赖其他的包,在Maven中,这些被依赖的包就被称为 dependency。 |
Plug-in | Maven是有插件组织的,它的每一个功能都是由插件提供的,主要的插件是由 java 来写的,但是他也支持 beanshell 和 ant 脚本编写的插件。 |
Repository | 仓库用来存放artifact的,可以是本地仓库,也可以是远程仓库,Maven是有一个默认的仓库 |
Snapshot | 工程中可以(也应该)有这样一个特殊的版本:这个版本可以告诉Maven,该工程正在处于开发阶段,会经常更新(但还未发布)。当其他工程依赖此类型的artifact时,Maven会在仓库中寻找该artifact的最新版本,并自动下载、使用该最新版本。 |
Maven命令
Maven 标准目录结构
好的目录结构可以使开发人员更容易理解项目,为以后的维护工作也打下良好的基础。
Maven2根据业界公认的最佳目录结构,为开发者提供了缺省的标准目录模板。Maven2的标准目录结构如下:
更!!!
2016-11-28
本地仓库、远程仓库
有全局和用户之分。如果更改用户下的配置只对当前用户起作用,更改全局的则对所有的用户起作用。
maven的仓库只有两大类:
- 1.本地仓库:就是Maven在本地存储构件的地方。
1.1 maven的本地仓库,在安装maven后并不会创建,它是在第一次执行maven命令的时候才被创建。
1.2 maven本地仓库的默认位置:无论是Windows还是Linux,在用户的目录下都有一个
.m2/repository/
的仓库目录,这就是Maven仓库的默认位置-
1.3 如果需要更改maven默认的本地仓库的位置,这里要引入一个新的元素:
localRepository
,它是存在于maven的settings.xml
文件中- 1.3.1 先在
/.m2/
目录下创建settings.xml
文件,然后在~/.m2/settings.xml
,设置localRepository
元素的值为想要的仓库地址
- 1.3.1 先在
<settings>
<localRepository>本地maven路径</localRepository>
</settings>
```
- 2.远程仓库
- 2.1 中央仓库
- 2.1.1 最核心的中央仓库开始,中央仓库是默认的远程仓库,maven在安装的时候,自带的就是中央仓库的配置。
- 2.2 私服
- 2.2.1 私服是一种特殊的远程仓库,它是架设在局域网内的仓库服务,私服代理广域网上的远程仓库,供局域网内的Maven用户使用。当Maven需要下载构件的时候,它从私服请求,如果私服上不存在该构件,则从外部的远程仓库下载,缓存在私服上之后,再为Maven的下载请求提供服务。我们还可以把一些无法从外部仓库下载到的构件上传到私服上。
- 2.2.2 当前主流的maven私服:
- 1.Apache的Archiva
- 2.JFrog的Artifactory
- 3.Sonatype的Nexus
- 2.3 其它公共库
- 2.1 中央仓库
远程仓库配置
配置远程仓库将引入新的配置元素:<repositories> <repository>
在<repositories>
元素下,可以使用<repository>
子元素声明一个或者多个远程仓库。
<updatePolicy>
元素:表示更新的频率,值有:never, always,interval,daily, daily
为默认值。