Maven实战读书笔记(6)

Maven的坐标和依赖是?构件的逻辑表示方式和物理表示方式是?

1、坐标和依赖是任何一个构件在Maven世界中的逻辑表示方式

2、文件是Maven构件的物理表示方式

3、Maven通过仓库来统一管理这些文件

那么,构件是什么东东?

1、任何一个依赖、插件或者项目构建的输出,都可以称为构件

2、依赖log4j-1.2.15.jar是一个构件

3、插件maven-compiler-plugin-2.0.2.jar是一个构件

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完全忽略校验和错误

时间: 2024-10-05 08:37:04

Maven实战读书笔记(6)的相关文章

Maven实战读书笔记(15)

关于灵活的构建 一个优秀的构建系统必须足够灵活,它应该能够让项目在不同的环境下都能成功地构建. 例如,典型的项目都会有开发环境.测试环境和产品环境,这些环境的数据库配置不尽相同,那么项目构建的时候就需要能够识别所在的环境并使用正确的配置 还有一种常见的情况是,项目开发了大量的集成测试,这些测试运行起来非常耗时,不适合在每次构建项目的时候都运行,因此需要一种手段能让我们在特定的时候才激活这些集成测试,Maven为了支持构建的灵活性,内置了三大特性,即属性.Profile和资源过滤 Maven属性

Maven实战读书笔记(8)

何为Maven的生命周期? 1.Maven从大量项目和构建工具中学习和反思,然后总结了一套高度完善的.易扩展的生命周期 2.这个生命周期包含了项目的清理.初始化.编译.测试.打包.集成测试.验证.部署和站点生成等几乎所有的构建步骤 3.Maven的生命周期是抽象的,这意味着生命周期本身不做任何实际的工作,实际的任务(如编译源代码)都是交由插件来完成的 Maven的这种思想与设计模式的模板方法非常相似 模板方法模式在父类中定义算法的整体结构,子类可以通过实现或者重写父类的方法来控制实际的行为,这样

Maven实战读书笔记(3)

POM是什么? 1.像Make的Makefile.Ant的build.xml一样,Maven项目的核心是pom.xml 2.POM (Project Object Model, 项目对象模型) 定义了项目的基本信息,用于描述项目如何构建,声明项目依赖等等 如何编写一个Hello World的POM? 新建一个名为pom.xml的文件,输入内容如下: <?xml version="1.0" encoding="UTF-8"?> <project xm

Maven实战读书笔记(13)

WAR 1.基于Java的Web应用,其标准的打包方式是WAR 2.WAR与JAR类似,不过它包含更多的内容,如JSP文件.Servlet.Java类.web.xml配置文件.依赖JAR包.静态web资源(如HTML.CSS.JavaScript文件)等 一个典型的WAR文件的目录结构 - war / + META-INF / + WEB-INF / | + classes / | | + ServletA.class | | + config.properties | | + ... | |

maven实战读书笔记(1)

Maven这个词的中文翻译是? 可以翻译为"知识的积累",也可以翻译为"专家"或"内行" Maven是啥?干什么的? 1.一个跨平台的项目管理工具 2.Apache组织的一个颇为成功的开源项目 3.Maven主要服务于基于Java平台的项目构建.依赖管理和项目信息管理 4.适合小型的开源类项目.大型的企业级应用 5.适合传统的瀑布式开发.流行的敏捷模式开发 跨平台是指?Maven是跨平台的 无论是Windows.Linux或者Mac上,都可以使用

Maven实战读书笔记(14)

什么是版本管理? 版本管理是指项目整体版本的演变过程管理,如从1.0-SNAPSHOT到1.0再到1.1-SNAPSHOT 什么是版本控制? 版本控制是指借助版本控制工具(如Subversion)追踪代码的每一个变更 什么时候可以将快照版本更新为发布版本 1.所有自动化测试应当全部通过 2.项目没有配置任何快照版本的依赖 3.项目没有配置任何快照版本的插件 4.项目所包含的代码已经全部提交到版本控制系统中 Maven的版本号定义约束 可能有个版本号是这样的,1.3.4-beta-2 Maven的

Maven实战读书笔记(12)- Nexus

Nexus 简介 安装Nexus Nexus的仓库与仓库组 Nexus的索引与构件搜索 配置Maven从Nexus下载构件 部署构件至Nexus Nexus的权限管理 Nexus的调度任务 其他私服软件 小结

Maven实战读书笔记(18)

代码行统计插件的POM <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <m

Maven实战读书笔记(7)

远程仓库的认证 1.一般来说,远程仓库无须认证就可以访问 2.但有时候出于安全考虑,需要提供认证信息,为了防止非法的仓库访问,管理员为每个仓库提供了一组用户名及密码 3.这时为了让Maven访问仓库内容,就需要配置认证信息 如何配置认证信息? 1.配置认证信息和配置仓库信息不同,仓库信息可以直接配置在POM文件中,但是认证信息必须配置在settings.xml文件中 2.这是因为POM往往是被提交到代码仓库中供所有成员访问的,而settings.xml一般只放在本机.因此,在settings.x