- 浏览: 796657 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (651)
- Java (39)
- Java 初学者小问题 (66)
- 设计模式 (7)
- 项目管理 (3)
- 数据库 (1)
- 算法 (2)
- Java practices (6)
- Effective Java2读书笔记 (78)
- Linux (2)
- programming ruby 读书笔记 (5)
- Core Java Ninth Edition Volume I 读书笔记 (15)
- Pro Git 读书笔记 (12)
- Git (3)
- Maven in Action 读书笔记 (20)
- Web (12)
- 非技术类书籍 (11)
- 电影 (40)
- Web Cache (1)
- jquery (0)
- 历史 (4)
- Dive Into HTML5 读书笔记 (13)
- 三国演义小学毕业考 (79)
- 高效能人士的7个习惯 读书笔记 (12)
- Java Performance 读书笔记 (3)
- Protocol Buffer 学习笔记 (6)
- Mongo DB 学习笔记 (7)
- Morphia 学习笔记 (7)
- Algorithms -- Princeton 学习笔记 (13)
- String研究 (10)
- Hadoop: The Definitive Guide 读书笔记 (3)
- Java与模式读书笔记 (5)
- Date研究 (3)
- The Roman Empire 听课笔记 (4)
- Algorithms -- Standford 学习笔记 (16)
- Core Java Ninth Edition Volume II 读书笔记 (9)
- Thinking in Java 4th Edition 读书笔记 (21)
- Node : Up and Running 学习笔记 (5)
- Eloquent Javascript (8)
- Smashing Node.js 读书笔记 (1)
- Algorithms II -- Standford 学习笔记 (19)
- Algorithm II -- Princeton 学习笔记 (14)
- 网络安全 (2)
- Javascript (4)
- 正则表达式 (1)
- JAVA 7/8 (15)
- JVM (10)
- NodeJS (1)
- 鸟哥的linux私房菜读书笔记 (14)
- Web Service (1)
- The art of programming (9)
- Introduction to Algorithm 读书笔记 (4)
- Java 源码阅读 (0)
- Spring in Action 读书笔记 (2)
- Java Network Programming 读书笔记 (2)
最新评论
-
心存高远:
谢谢作者分享,刚好看到这里不太明白,现在茅塞顿开。不过runt ...
关于 Maven的传递依赖的理解 -
sxlkk:
851228082 写道甚至在某次技术会议现场遇到《Maven ...
关于 Maven的传递依赖的理解 -
851228082:
851228082 写道a----compile----b-- ...
第五章 坐标和依赖 -
851228082:
a----compile----b-----provided- ...
第五章 坐标和依赖 -
851228082:
甚至在某次技术会议现场遇到《Maven in action》的 ...
关于 Maven的传递依赖的理解
1. Maven 在一个工作站上的某个位置统一存储所有 Maven 项目共享的构件,这个统一的位置就是仓库。 Maven 项目将不再各自存储其依赖的文件,它们只需要声明这些依赖项目的坐标,在需要的时候, Maven 会自动在仓库中找到它们,并使用它们。一个 Maven 项目构建完毕后生成的构件也可以安装到仓库中供其它项目使用。
2. 一个构件在仓库中的路径为:
groupId/artifactId/baseVersion/artifactId-version(-classifier).packaging 。其中 groupId 中的“ . ”会被替换成路径分隔符“ / ”, baseVersion 主要是对应 SNAPSHOT version 而言的,如果一个构建的 version 是 1.0.0-SNAPSHOT ,那 baseVersion 就是 1.0.0 。例如:
org.testing:testing:2.5.6-SNAPSHOT:jdk5:jar 就会对应到
org/testing/testing/2.5.6/testing-2.5.6-SNAPSHOT-jdk5.jar
3. Maven 仓库分为两类:本地仓库和远程仓库。当 Maven 寻找构件时会先查找本地仓库,如果本地仓库不存在此构件,或者需要查看是否有更新的构件版本, Maven 就会去远程仓库查找。
4. 一些公共远程仓库: Java.net Maven 库( http://download.java.net/maven/2 )和 JBoss Maven 库( http://repository.jboss.com/maven2/ )。
5. Maven 默认的本地仓库位置是在用户目录下的 .m2/repository 下。也可以修改 .m2/settings.xml 自定义仓库位置:
<settings> <localRespository>D:\java\repository</localRepository> </settings>
6. mvn clean install 可以将当前 Maven 项目构建出的构件安装到本地的仓库中。
7. Maven 默认自带了一个中央仓库,解压 lib/ maven-model-builder-3.0.jar ( Maven2 中为 maven-2.2.1-uber.jar ),然后访问路径 org/apache/maven/model/pom-4.0.0.xml ( Maven2 中为 org/apache/maven/project/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>
Maven1 的 layout 是 legacy ,构件会有不同的文件路径。 snapshots 的 enabled 设为 false 表明 Maven 不会从该远程仓库下载 SNAPSHOT 版本的构件。
8. 私服是一种特殊的远程仓库,它可以:
1) 节省外网带宽。(构件缓存在局域网的私服上)
2) 加速 Maven 构建。(构建时只需检查私服上的更新)
3) 部署第三方构件。(有些构件因版权问题不能放在公共仓库上)
4) 提高稳定性,增强控制( Internet 不稳定时不影响构建。 Nexus 有许多增强功能)
5) 降低中央仓库的负荷
9. 可 以修改项目的 POM ,添加远程仓库的配置:
<repositories> <repository> <id>jboss</id> <name>JBoss Repository</name> <url>http://repository.jboss.com/maven2/</url > <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> <layout>default</layout> </repository> </repositories>
仓库的 id 必须是唯一的, Maven 自带的中央仓库的 id 是 central ,如果 POM 中声明的仓库 id 也是 central 会覆盖中央仓库。 releases 的 enabled 为 true , snapshots 的 enabled 为 false ,表明该仓库只会下载 release 版本不会下载 snapshot 版本。
10. s napshots 和 releases 中还可以包含 updatePolicy 和 checksumPolicy 两个元素 :
updatePolicy 表示检查更新的周期,可选值为: daily (每天检查一次), never (从不检查), always (每次构建都检查), interval:X (每隔 X 分钟检查一次)。默认值为 daily 。
checksumPolicy 是用来表明校验失败时如何处理,可选值为 warn , fail , ignore 。默认值为 warn 。
11. 有些远程仓库需要认证,但认证信息不宜放在 POM 中,因为 POM 一般会被提交到代码仓库中,不安全。认证信息会被配置在 settings.xml 中:
<servers> <server> <id>jobs</id> <username>usrname</username> <password>passw0rd</password> </server> </servers>
id 要和仓库的 id 保持一致。
12. 可 以在 POM 中配置构件想要部署到的远程仓库的信息:
<distributionManagement> <repository> <id>proj-release</id> <name>Project Release Repository</name> <url>http://192.168.1.100/content/repositories/proj-releases</url> </repository> <snapshortRepository> <id>proj-snapshot</id> <name>Project Snapshot Repository</name> <url>http://192.168.1.100/content/repositories/proj-snapshots</url> </snapshotRepository> </distributionManagement>
repository 中配置的是项目稳定版本( release 版本)发布的仓库地址, snapshotRepository 中配置的是项目非稳定版本( snapshot 版本)发布的仓库地址。认证信息同样在 settings.xml 中的 servers 元素中配置。
13. Mvn clean deploy 就会将项目构建输出的构件部署到对应的远程仓库中。
14. 当 POM 中的项目版本定义为快照版本时,如 2.1-SNAPSHOT , Maven 在发布项目时会将 SNAPSHOT 替换成当前时间戳。如 2.1-20111203-174413-12 表示 2011 年 12 月 3 日 17 点 44 分 13 秒的第 12 次快照。而当 POM 中声明的依赖为 SNAPSHOT 版本时, Maven 会在远程仓库中寻找最新的快照。
15. 快照版本只应该在组织内部的项目或模块间依赖使用,而不应该依赖于组织外部的快照版本。因为快照版本是不稳定的,今天构建成功很可能明天就构建失败。
16. 依赖解析机制:
1) 依赖为 system 时,直接从本地文件系统解析。
2)在 本地仓库寻找构件,如果发现相应构件,则解析成功。
3)在 本地仓库找不到构件时,到所有配置的远程仓库寻找构件。
17. 如果依赖的版本是 RELEASE (最新 release 版本)或者 LATEST (最新版本)。(这两者 Maven3 已经不支持,只有当不指定版本号时, Maven3 默认为最新 release 版本)则基于更新策略读取所有远程仓库的 groupId/artifactId/maven-metadata.xml 中的元数据和与本地仓库中的元数据合并后,计算出真实的版本号再解析。 Metadata 信息如下:
<?xml version=”1.0” encoding=”UTF-8”?> <metadata> <groupId>org.sonatype.nexus</groupId> <artifactId>nexus</artifact> <versioning> <latest>1.4.2-SNAPSHOT</latest> <release>1.4.0</release> <versions> <version>1.3.5</version> <version>1.3.6</version> <version>1.4.0-SNAPSHOT</version> … </versions> <lastUpdated>20111203180918</lastUpdated> </versioning> </metadata>
18. 如果依赖的版本是 SNAPSHOT ,则基于更新策略读取所有远程仓库的 groupId/artifactId/version/maven-metadata.xml 中的元数据和与本地仓库中的元数据合并后,计算出最新的快照版本的值,再进行解析。 Metadata 信息如下:
<?xml version=”1.0” encoding=”UTF-8”?> <metadata> <groupId>org.sonatype.nexus</groupId> <artifactId>nexus</artifactId> <version>1.4.2-SNAPSHOT</version> <versioning> <snapshot> <timestamp>20111203.181523</timestamp> <buildNumber>12</buildNumber> </snapshot> … <lastUpdated>20111203181620</lastUpdated> </versioning> </metadata>
19. 远程仓库的更新策略由远程仓库配置中( <repositories> 元素) <releases> 和 <snapshots> 中配置的 <updatePolicy> 决定,用户也可以在命令行加入参数 -U 来强制更新, Maven 就会忽略 updatePolicy 。
20. 如果最后解析得到的构件版本是时间戳格式的快照,如 1.4.1-20091104.121450-121 ,则复制其时间戳格式的文件至非时间戳格式,如 SNAPSHOT ,并使用该非时间戳格式的构件。何解?为什么?
21. 如果所有可以从仓库 A 上获得的构件都可以从仓库 B 上获得,我们称仓库 B 为仓库 A 的镜像。可以修改 settings.xml 来配置远程仓库的镜像:
<mirrors> <mirror> <id>maven.net.cn</id> <name>one of the central mirrors in China</name> <url>http://maven.net.cn/content/groups/public/</url> <mirrorOf>central</mirrorOf> </mirror> … </mirrors>
mirrorOf 可以取以下几种特殊值:
* ,所有远程仓库(通常私服为所有远程仓库的镜像)
external:* ,所有非本机上的远程仓库(使用 localhost 或 file:// 的除外)
repo1,repo2 ,多个仓库用逗号分隔
*, !repo1 ,所有远程仓库 repo1 除外。
22. 仓库搜索服务
名字 |
网址 |
特殊功能 |
基本功能 |
Sonatype Nexus |
基于checksum 搜索 |
关键字搜索、类名搜索、坐标搜索 |
|
Jarvana |
浏览构件内部的内容 |
||
MVNbrowser |
显示某个构件依赖于哪些构件以及被哪些构件引用 |
||
MVNrepository |
显示某个构件各版本间的大小变化,构件之间的依赖关系 |
评论
我理解的是这样的:
首先,我们的A项目版本为: 1.4.1-SNAPSHOT
通过我们的命令mvn -clean deploy部署到远程仓库后存放的版本为:1.4.1-20091104.121450-121
然后其他人在B项目中通过pom配置依赖A项目的构建版本:1.4.1-SNAPSHOT
这时需要去远程仓库拿该构建的最新快照版本(为1.4.1-20091104.121450-121),但因为我们项目中需要的版本号为:1.4.1-SNAPSHOT,所以最终使用的是该非时间戳格式的构件。这样可以保证我们使用的快照版本是远程仓库上最新的版本号
发表评论
-
关于 Maven的传递依赖的理解
2012-09-30 09:50 13983今天又回顾了一下 《Maven in Action》的读书笔记 ... -
《Maven in Action》读后感
2012-02-23 23:48 2210今天终于读完了《Maven in Action》一书,真所谓书 ... -
第十八章 Archetype
2012-02-23 23:30 50831. Archetype 是 Maven ... -
第十七章 编写Maven插件
2012-02-23 19:42 44921. 编写 Maven 插件的主要步骤 ... -
第十六章 m2eclipse
2012-02-23 15:44 23771. m2eclipse ( http: ... -
第十五章 生成项目站点
2012-02-21 09:27 22881. Maven 社区提供了大量插件,能让用户 ... -
第十四章 灵活的构建
2012-02-20 16:21 18701. 通过 <propertie ... -
第十三章 版本管理
2012-02-20 15:57 21201. 版本管理( Version Manage ... -
第十二章 使用Maven构建Web应用
2012-02-15 18:38 60411. Web 项目的 POM ... -
第十一章 使用Hudson进行持续集成
2012-02-09 17:09 23171. 持续集成就是快速 且高频率 ... -
第十章 使用Maven进行测试
2012-02-05 22:17 214111. com.google.code. ... -
第九章 使用Nexus创建私服
2011-12-06 23:17 108051. Nexus 分为开源版和企业版,开源 ... -
第八章 聚合与继承
2011-12-06 09:55 20491. 为了能用一条命令来构建一个实际 ... -
第七章 生命周期和插件
2011-12-05 13:36 23081. Maven 的生命周期就是为了对所有的构 ... -
第五章 坐标和依赖
2011-12-03 15:14 20851. Maven 定义了这样一组规则:世界上任 ... -
第四章 背景案例
2011-12-02 21:20 14231. 主要场景: 1) 用户访问注册页面 2) ... -
第三章 Maven 使用入门
2011-12-01 18:40 25501. 就像Make的Makefile, Ant的build. ... -
第二章 Maven的安装和配置
2011-12-01 10:01 62411. 设置JAVA_HOME, Path中加入%JAVA_H ... -
第一章 Maven 简介
2011-12-01 09:48 22901. Maven 是优秀的构建工 ...
相关推荐
第六章 仓库管理 第七章 财务管理 第八章 卖场管理 第九章 联营管理 第十章 总经理查询 第十一章 系统管理 第十二章 工资管理 第十三章 配送管理 第十四章 连锁分店业务管理 第十五章 二代机接口模块 第三...
研究生第六章数据仓库与数据挖掘的决策支持.pptx
《第三章仓库生产设备配置》章节主要探讨了仓库设备配置的重要性、设备分类、特点以及选择原则。仓库设备配置是仓库系统规划的关键部分,不仅影响仓库的建设和运营成本,还直接关系到仓库的作业效率和经济效益。 ...
《第二章 仓库规划与设置》的PPT内容聚焦于仓库设计的重要环节,包括仓库的选址、储存布局、制造业仓库规划以及仓库总面积的确定。仓库规划是物流运作的关键部分,直接关乎企业的运营效率、成本控制和客户服务。 ...
第6章 序列模式挖掘.pptx 第7章 分类方法(续).pptx 第7章 分类方法.pptx 第8章 回归和时序分析.pptx 第9章 粗糙集理论.pptx 第10章 聚类方法(续).pptx 第10章 聚类方法.pptx 第11章 Web使用挖掘介绍及趋势.pptx
在本资源中,我们聚焦于"数据库系统第六章答案",这是一个针对特定章节学习的辅助材料,旨在帮助学生理解和掌握数据库系统的深入概念,特别是与SQL Server相关的编程实践。 第六章通常涵盖数据库设计、查询优化、...
《数据仓库与数据挖掘》第9章主要探讨了分类和预测这两个重要的数据分析技术。分类是预测离散或名义类别的过程,而预测则用于建模连续值函数,预测未知或缺失的值。这两种方法在各个领域都有广泛的应用,如信用审批...
第6章-数据库和数据仓库技术.pptx
6. **安全性**:设置合适的权限,防止未经授权的访问,保护敏感数据的安全。 通过学习和实践这个仓库管理系统,开发者不仅可以掌握数据库系统的开发技术,还能提升对软件工程的理解,包括需求分析、系统设计、编码...
第6章 分布式数据仓库 116 6.1 引言 116 6.2 局部数据仓库 118 6.3 全局数据仓库 119 6.4 互斥数据 121 6.5 冗余 123 6.6 全局数据存取 124 6.7 分布式环境下其他考虑因素 126 6.8 管理多个开发项目 127 6.9 开发...
第九章的仓库生产绩效管理是物流管理中的关键环节,它涉及到如何评估和改进仓库运营的效率和效果。绩效管理旨在确保仓库运作与企业目标相一致,通过设定和追踪一系列指标来提升生产力,降低成本,提高服务质量。 一...
第6章 分类算法基础-决策树(共103页).ppt 第6章 其他分类算法(共76页).ppt 第7章 聚类算法分析(共140页).ppt 第8章 应用案例分析(共10页).ppt 2016数据挖据教学计划.docx 期末考核.ppt
本书主要介绍数据仓库的概念、基本原理、规划、开发方法以及相关算法。全书共分7章。第1章介绍决策支持、数据仓库和数据开采技术的历史...第6章介绍数据开采的主要理论和方法,第7章介绍联机分析概念、技术和相关产品。
【第六章 数据库与数据仓库】的讲解涵盖了数据库技术的基础概念和数据管理的发展历程,以及数据仓库的相关内容。本章内容主要分为两大部分:数据库技术和数据仓库。 首先,讲解了数据库的基本概念。数据库是一个...
第六条 不合格品应隔离堆放。 第七条 验收中发现的问题,要及时通知主管和经办人处理。托收单到而货未到,或货已到而无发票,均应向经办人反映查询,直至消除悬念挂账。 签发人 责任人签名 制度名 仓库管理制度...
【课程简介】 本课程适合所有需要学习数据仓库与数据挖掘知识的同学,课件内容制作精细,由浅入深,适合入门...数据仓库与数据挖掘教程 第6章 关联挖掘 共30页.pptx 数据仓库与数据挖掘教程 第7章 聚类分析 共78页.pptx
第六章:数据仓库的演变与云计算 随着大数据和云计算的发展,数据仓库也面临着新的挑战和机遇。本章将介绍云数据仓库的概念,如Amazon Redshift、Google BigQuery和Microsoft Azure Synapse Analytics,并探讨它们的...
数据仓库的开发模型分为六个主要部分:数据仓库开发模型、数据仓库概念模型、数据仓库逻辑模型、数据仓库的物理模型、数据仓库的元数据模型以及数据仓库的粒度和聚集模型。 首先,数据仓库开发模型是一种将现实世界...
本章主要探讨了仓库规模和数量的决策、仓库选址、选址方法以及平面规划等多个方面。 一、仓库规模的决策 仓库规模的确定基于产品产量、库存周转率、客户服务水平、市场大小、最大日库存量、库存物品尺寸、物料搬运...