- 浏览: 799637 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (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 13989今天又回顾了一下 《Maven in Action》的读书笔记 ... -
《Maven in Action》读后感
2012-02-23 23:48 2213今天终于读完了《Maven in Action》一书,真所谓书 ... -
第十八章 Archetype
2012-02-23 23:30 50881. Archetype 是 Maven ... -
第十七章 编写Maven插件
2012-02-23 19:42 44981. 编写 Maven 插件的主要步骤 ... -
第十六章 m2eclipse
2012-02-23 15:44 23801. m2eclipse ( http: ... -
第十五章 生成项目站点
2012-02-21 09:27 22911. Maven 社区提供了大量插件,能让用户 ... -
第十四章 灵活的构建
2012-02-20 16:21 18731. 通过 <propertie ... -
第十三章 版本管理
2012-02-20 15:57 21221. 版本管理( Version Manage ... -
第十二章 使用Maven构建Web应用
2012-02-15 18:38 60431. Web 项目的 POM ... -
第十一章 使用Hudson进行持续集成
2012-02-09 17:09 23231. 持续集成就是快速 且高频率 ... -
第十章 使用Maven进行测试
2012-02-05 22:17 214221. com.google.code. ... -
第九章 使用Nexus创建私服
2011-12-06 23:17 108141. Nexus 分为开源版和企业版,开源 ... -
第八章 聚合与继承
2011-12-06 09:55 20531. 为了能用一条命令来构建一个实际 ... -
第七章 生命周期和插件
2011-12-05 13:36 23101. Maven 的生命周期就是为了对所有的构 ... -
第五章 坐标和依赖
2011-12-03 15:14 20891. Maven 定义了这样一组规则:世界上任 ... -
第四章 背景案例
2011-12-02 21:20 14271. 主要场景: 1) 用户访问注册页面 2) ... -
第三章 Maven 使用入门
2011-12-01 18:40 25521. 就像Make的Makefile, Ant的build. ... -
第二章 Maven的安装和配置
2011-12-01 10:01 62431. 设置JAVA_HOME, Path中加入%JAVA_H ... -
第一章 Maven 简介
2011-12-01 09:48 22921. Maven 是优秀的构建工 ...
相关推荐
第六章 仓库管理 第七章 财务管理 第八章 卖场管理 第九章 联营管理 第十章 总经理查询 第十一章 系统管理 第十二章 工资管理 第十三章 配送管理 第十四章 连锁分店业务管理 第十五章 二代机接口模块 第三...
研究生第六章数据仓库与数据挖掘的决策支持.pptx
《第三章仓库生产设备配置》章节主要探讨了仓库设备配置的重要性、设备分类、特点以及选择原则。仓库设备配置是仓库系统规划的关键部分,不仅影响仓库的建设和运营成本,还直接关系到仓库的作业效率和经济效益。 ...
《第二章 仓库规划与设置》的PPT内容聚焦于仓库设计的重要环节,包括仓库的选址、储存布局、制造业仓库规划以及仓库总面积的确定。仓库规划是物流运作的关键部分,直接关乎企业的运营效率、成本控制和客户服务。 ...
第6章 序列模式挖掘.pptx 第7章 分类方法(续).pptx 第7章 分类方法.pptx 第8章 回归和时序分析.pptx 第9章 粗糙集理论.pptx 第10章 聚类方法(续).pptx 第10章 聚类方法.pptx 第11章 Web使用挖掘介绍及趋势.pptx
在本资源中,我们聚焦于"数据库系统第六章答案",这是一个针对特定章节学习的辅助材料,旨在帮助学生理解和掌握数据库系统的深入概念,特别是与SQL Server相关的编程实践。 第六章通常涵盖数据库设计、查询优化、...
第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 开发...
《数据仓库与数据挖掘》第9章主要探讨了分类和预测这两个重要的数据分析技术。分类是预测离散或名义类别的过程,而预测则用于建模连续值函数,预测未知或缺失的值。这两种方法在各个领域都有广泛的应用,如信用审批...
第6章-数据库和数据仓库技术.pptx
6. **安全性**:设置合适的权限,防止未经授权的访问,保护敏感数据的安全。 通过学习和实践这个仓库管理系统,开发者不仅可以掌握数据库系统的开发技术,还能提升对软件工程的理解,包括需求分析、系统设计、编码...
第九章的仓库生产绩效管理是物流管理中的关键环节,它涉及到如何评估和改进仓库运营的效率和效果。绩效管理旨在确保仓库运作与企业目标相一致,通过设定和追踪一系列指标来提升生产力,降低成本,提高服务质量。 一...
第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,并探讨它们的...
数据仓库的开发模型分为六个主要部分:数据仓库开发模型、数据仓库概念模型、数据仓库逻辑模型、数据仓库的物理模型、数据仓库的元数据模型以及数据仓库的粒度和聚集模型。 首先,数据仓库开发模型是一种将现实世界...
本章主要探讨了仓库规模和数量的决策、仓库选址、选址方法以及平面规划等多个方面。 一、仓库规模的决策 仓库规模的确定基于产品产量、库存周转率、客户服务水平、市场大小、最大日库存量、库存物品尺寸、物料搬运...