Maven的坐标和依赖是?构件的逻辑表示方式和物理表示方式是?java
1、坐标和依赖是任何一个构件在Maven世界中的逻辑表示方式程序员
2、文件是Maven构件的物理表示方式apache
3、Maven经过仓库来统一管理这些文件windows
那么,构件是什么东东?浏览器
1、任何一个依赖、插件或者项目构建的输出,均可以称为构件缓存
2、依赖log4j-1.2.15.jar是一个构件服务器
3、插件maven-compiler-plugin-2.0.2.jar是一个构件maven
4、account-email项目构建完成后输出account-email-1.0.0-SNAPSHOT.jar也是一个构件工具
5、任何一个构件都有一组坐标惟一标识布局
传统的项目关于jar包的问题?
1、一个工做站上,可能有十几个项目
2、大部分项目可能都用到log4j,小部分用到Spring Framework,还有另一小部分用到Struts2
3、不少项目都在重复复制jar,形成了磁盘空间的浪费,难于管理,文件复制等操做也会下降构建速度
4、传统项目每每有一个lib/的目录,各个项目lib/目录下的内容存在大量重复
如何解决上面的问题?什么是Maven的仓库?
1、得益于坐标机制,任何Maven项目使用任何一个构件的方式都是彻底相同的
2、在此基础上,Maven能够在某个位置统一存储全部Maven项目共享的构件,这个统一的位置就是仓库
3、实际的项目将再也不各自存储其依赖文件,它们只须要声明这些依赖的坐标
什么是仓库的布局?
1、任何一个构件都有其惟一的坐标,根据这个坐标能够定义其在仓库中的惟一存储路径,这即是Maven的仓库布局方式
2、例如log4j:log4j:1.2.15这一依赖,其对应的仓库路径为log4j/log4j/1.2.15/log4j-1.2.15.jar
3、其格式就是groupId/artifactId/version/artifactId-version.packaging
Maven仓库的分类?
Maven仓库只分为两类:本地仓库和远程仓库
Maven寻找构件的机制是?
当Maven根据坐标寻找构件的时候,它首先查看本地仓库,若是本地仓库存在此构建,则直接使用;若是本地仓库不存在此构件,或者须要查看是否有更新的构建版本,Maven就会去远程仓库查找,发现须要的构件以后,下载到本地仓库再使用,若是本地仓库和远程仓库都没有须要的构建,Maven就会报错
远程仓库的分类?
1、中央仓库是Maven核心自带的远程仓库,它包含了绝大部分开源的构件,在默认配置下,当本地仓库没有Maven须要的构件的时候,它就会尝试从中央仓库下载
2、私服是另外一种特殊的远程仓库,为了节省带宽和时间,应该在局域网内假设一个私有的仓库服务器,用其代理全部外部的远程仓库,内部的项目还能部署到私服上供其余项目使用
3、除了中央仓库和私服,还有不少其余公开的远程仓库常见的有Java.net Maven库
(http://download.java.net/maven/2/)和JBoss Maven库(http://repository.jboss.com/maven2)等
本地仓库介绍
1、Maven项目目录没有诸如lib/这样用来存放依赖文件的目录,当执行编译或测试时,若是须要使用依赖文件,它老是基于坐标使用本地仓库的依赖文件
2、默认状况下,不论是windows仍是Linux,每一个用户在本身的用户目录下都有一个路径名为,m2/repository/的仓库目录
3、有些时候想修改仓库目录,能够编辑~/.m2/settings.xml,设置localRepository元素的值,例如:
<settings>
<localRepository>D:\maven\repository</localRepository>
</settins>
远程仓库介绍
1、远程仓库可有多个,本地仓库只能有一个
2、当Maven没法从本地仓库找到须要的构件的时候,就会从远程仓库下载构件至本地仓库
中央仓库介绍
1、最原始的本地仓库是空的,Maven必须知道至少一个可用的远程仓库,才能在执行Maven命令的时候下载到须要的构件
2、中央仓库就是这样一个默认的远程仓库,Maven的安装文件自带了中央仓库的配置
3、使用解压工具打开jar文件$M2_HOME/lib/maven-model-builder-3.0.jar (在Maven 2 中,jar文件路径相似于M2_HOME/lib/maven-2.2.1-uber.jar),而后访问路径,org/apache/maven/model/pom-4.0.0.xml,能够看到以下配置:
<repositories>
<repository>
<id>central</id>
<name>Maven Repository Switchboard</name>
<url>http://repo1.maven.org/maven2</url>
<layout>default</layout>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
对上面配置进行说明:
1、包含这段配置的文件是全部Maven项目都会继承的超级POM
2、这段配置使用id central对中央仓库进行惟一标识,名称为Maven Repository Switchboard,使用default仓库布局,snapshots元素,其子元素enabled的值为false,表示不从该中央仓库下载快照版本的构件
中央仓库的牛X之处
1、中央仓库包涵了这个世界上绝大多数流行的开源Java构件,以及源码、做者信息、SCM、信息、许可证信息等,每月这里都会接受全世界Java程序员大概1亿次的访问
2、中央仓库包涵了超过2000个开源项目的构件,通常来讲,一个简单的Maven项目所须要的依赖构件都能从中央仓库下载到
私服是什么?
私服是一种特殊的远程仓库,它是架设在局域网内的仓库服务,私服代理广域网上的远程仓库,供局域网内的Maven用户使用
使用私服的流程是?
当Maven须要下载构件的时候,它从私服请求,若是私服上不存在该构件,则从外部的远程仓库下载,缓存在私服上以后,再为Maven的下载请求提供服务
此外,一些没法从外部仓库下载到的构建也能从本地仓库上传到私服上供你们使用
搭建私服的优点?
1、节省本身的外网带宽
2、加速Maven构建
3、部署第三方构件
4、提升稳定性,加强控制
5、下降中央仓库的负荷
配置POM使用JBOSS Maven仓库
在不少状况下,默认的中央仓库没法知足项目的需求,可能项目须要的构件存在于另一个远程仓库中,如JBoss Maven仓库
<project>
...
<repositories>
<repository>
<id>jboss</id>
<name>JBoss Repository</name>
<url>http://repository.jboss.com/maven2/</url>
<releases>
<enable>true</enable>
</releases>
<snapshots>
<enabled>false</enable>
</snapshots>
<layout>default</layout>
</repository>
</repositories>
...
</project>
对上面的配置说明:
1、在repositories元素下,可使用repository子元素声明一个或者多个远程仓库。该例中声明了一个id为jboss,名称为JBoss Repository的仓库
2、任何一个仓库声明的id必须是惟一的,尤为须要注意的是,Maven自带的中央仓库使用的id为central,若是其余的仓库声明也使用该id,就会覆盖中央仓库的配置
3、该配置中的url指向了仓库的地址,通常来讲该地址是基于http协议,Maven用户均可以在浏览器中打开仓库地址浏览构件
4、重要的releases和snapshots元素的配置,该配置中releases的enabled值为true,表示开启JBoss仓库的发布版本下载支持,而snapshots的enabled值为false,表示关闭JBoss仓库的快照版本的下载支持,所以,在该配置中Maven只会从JBoss仓库下载发布版的构件,而不会下载快照版的构件
releases和snapshots下的另外两个子元素updatePolicy和checksumPolicy
你可能会遇到下面这样的配置:
<snapshots>
<enable>true</enable>
<updatePolicy>daily</updatePolicy>
<checksumPolicy>ignore</checksumPolicy>
</snapshots>
关于updatePolicy的配置
元素updatePolicy用来配置Maven从远程仓库检查更新的频率,默认的值是daily,表示Maven天天检查一次
其余可用的值包括:never——从不检查更新;always——每次构件都检查更新;interval:X——每隔X分组检查一次更新 (X为任意整数)
关于checksumPolicy的配置
元素checksumPolicy用来配置Maven检查检验和文件的策略。当构件被部署到Maven仓库中时,会同时部署对应的校验和文件,在下载构件的时候,Maven会验证校验和文件
那么,若是校验失败怎么办?
当checksumPolicy的值为默认的warn时,Maven会在执行构建时输出警告信息,其余可用的值包括:fail-Maven遇到校验和错误就让构建失败;ignore——使Maven彻底忽略校验和错误