`
suhuanzheng7784877
  • 浏览: 701358 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
Ff8d036b-05a9-33b5-828a-2633bb68b7e6
读金庸故事,品程序人生
浏览量:47681
社区版块
存档分类
最新评论

Maven3实战笔记05仓库依赖解析与插件解析

阅读更多

1.  Maven仓库依赖解析机制

本节复习前文背景是:http://suhuanzheng7784877.iteye.com/blog/1069252

当本地仓库没有依赖组件的时候,Maven会从远程的中心仓库或者私服下载依赖包,当依赖的版本是快照版本的时候,则自动先找到快照的最新版本。

1.1:当依赖范围是system的时候,Maven直接从本地库解析

1.2:根据咱们之前提到的Maven坐标解析路径后,开始查找工作,如果根据坐标发现了该组件,那么认为此次解析依赖成功

 

2.1:当本地仓库不存在相应组件的情况下,如果在pom.xml写着以来的版本是显示的发布版本,例如

		<dependency>
			<groupId>javax.mail</groupId>
			<artifactId>mail</artifactId>
			<version>1.4.1</version>
		</dependency>
 就是要javax.mail.jar.1.4.1版本,遍历远程仓库,如果在远程仓库发现了精确版本,下载。

2.2.1:如果在pom.xml文件中依赖写着的版本是基于更新策略(RELEASE或者LATEST)读取远程仓库元数据,将远程元数据的版本与本地仓库元数据仓库对应合并后,计算出版本真实值,然后基于这个真实的值检查本地和远程仓库。重复1.11.2步骤。

2.2.2:如果pom文件中依赖的版本是快照版本SNAPSHOP版本,则读取远程仓库的元数据,将其与本地仓库元数据进行对比,合并,得到一个快照版本值,之后看哪个比较新,从相应的库下载(一般都是远程仓库比本地的新,基本不可能本地的比远程的仓库版本还新吧,除非是该组件的原作者)

2.2.3:如果最后解析出来的版本是时间戳,会将其替换成快照格式。

从而可以看出,当依赖版本很“暧昧”的时候——RELEASELATESTSNAPSHOPMaven需要将本地仓库和远程仓库进行对比,本地库与远程库要进行合并、更新。与此有关的配置是releasessnapshots,只有开启了相关配置,才能访问仓库的发布版本信息。

	<repositories>
		<repository>
			<id>jboss</id>
			<url>http://repository.jboss.com/maven2/</url>
			<releases>
				<enabled>true</enabled>
			</releases>
			<snapshots>
				<enabled>false</enabled>
			</snapshots>
			<layout>default</layout>
		</repository>
	</repositories>

 RELEASE:代表最新发布版本(发布的意思就是较为稳定,经过测试)

LATEST:代表最新版本(包含快照版本)

<?xml version="1.0" encoding="UTF-8"?><metadata>
  <groupId>org.icefaces</groupId>
  <artifactId>icefaces-comps</artifactId>
  <version>1.6.1</version>
  <versioning>
    <versions>
      <version>1.6.1</version>
      <version>1.6.2</version>
      <version>1.7.0</version>
      <version>1.7.1</version>
      <version>1.7.2</version>
      <version>1.8.0</version>
    </versions>
    <lastUpdated>20110602022501</lastUpdated>
  </versioning>
</metadata>

 

<?xml version="1.0" encoding="UTF-8"?><metadata>
  <groupId>org.eclipse.persistence</groupId>
  <artifactId>eclipselink</artifactId>
  <version>1.0.2</version>
  <versioning>
    <versions>
      <version>1.0.2</version>
    </versions>
    <lastUpdated>20110602022437</lastUpdated>
  </versioning>
</metadata>

 需要注意的是,这种暧昧的版本在Maven中不太推荐,有可能今天构建成功了,明天第三方组织发布了一个快照版本,接口全变了,那就构建失败了。所以别搞暧昧,需要什么版本,大大方方的提出来即可。

2.  Maven插件解析机制

本节复习前文背景是:http://suhuanzheng7784877.iteye.com/blog/1069257

我们使用Maven插件的目标的时候都是利用他的前缀(简写),一旦执行命令出问题了,比较难定位具体是哪个插件运行出错的。在此咱们一起来看看它的插件插件机制。为何将仓库的依赖解析和插件解析放在一起呢,因为他们确实有相似的地方。插件的组件也是基于坐标存在于Maven库中,需要的时候,从本地仓库需要相关插件,不存在,从远程仓库去找,找到后下载到本地。当然了区别于依赖的是插件的远程库必须显示的在pom文件中配置,不配置,不会去远程下载。

	<pluginRepositories>
		<pluginRepository>
			<id>central</id>
			<name>Maven plugin</name>
			<url>htpp://repo1.maven.org/maven2</url>
			<layout>default</layout>
			<snapshots>
				<enabled>true</enabled>
			</snapshots>
			<releases>
				<enabled>false</enabled>
			</releases>
		</pluginRepository>
	</pluginRepositories>

 这个和依赖库的配置意思差不多打开快照版本插件,如果自己写了Maven插件,可以参考上面的配置。使用插件时,默认的groupId的值是org.apache.maven.plugins,是官方apache标准插件。

	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-shade-plugin</artifactId>
				<executions>
					<execution>
						<phase>package</phase>
						<goals>
							<goal>shade</goal>
						</goals>
						<configuration>
							<transformers
								implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
								<mainClass>com.liuyan.maven.helloword.HelloWorld</mainClass>

							</transformers>
						</configuration>
					</execution>
				</executions>
			</plugin>
		</plugins>
	</build>

 <groupId>org.apache.maven.plugins</groupId>其实可以省略。

使用插件的版本解析和仓库依赖组件的解析一样,先从本地解析,寻找。没有了从配置仓库查找。同样建议别使用“暧昧”版本插件。

至于插件的前缀解析机制,可以参看插件元数据

Windows7平台:C:\Users\用户名\.m2\repository\org\apache\maven\plugins下面的maven-metadata-central.xml文件描述了大多数常用的插件信息、以及前缀简写信息。使用——简写插件:目标后Maven会根据简写找到具体的插件全名,之后根据插件的当前元数据groupId,之后在找到版本号信息,最后就得到了完整的该插件的完整坐标。之后按照坐标去找具体实现、下载、使用之。

3.  总结

这次补充了仓库依赖和插件的解析机制,让我们更了解一些Maven的内核机制。

 

4
0
分享到:
评论

相关推荐

    Maven3实战笔记(整合)

    从给定的文件信息来看,标题与描述都指向了“Maven3实战笔记(整合)”,这表明文档主要聚焦于Maven3的实践应用与整合经验分享。Maven是Apache软件基金会维护的一个开源项目,是一个项目管理和综合工具,主要用于Java...

    Maven3实战笔记(全)

    《Maven3实战笔记(全)》是一本全面深入介绍Maven3的实践指南,由一位具有独特风格的作者撰写,以其风趣幽默的方式解析了Maven3的各种核心概念和使用技巧。这本书涵盖了从Maven的基础安装与配置,到复杂的仓库依赖...

    Maven3实战笔记整合

    根据给定的文件信息,我们可以提取出关于"Maven3实战笔记整合"的知识点。由于文件内容部分出现了大量的乱码和不完整字符序列,无法直接从中提取有用的信息。但是,我们可以根据标题和描述以及通用的Maven知识点,来...

    Maven3实战笔记.pdf

    标题中提及的“Maven3实战笔记”指向了Maven这款流行的Java项目管理和自动化构建工具的第三个主要版本。Maven自从引入以来,就极大地简化了Java项目的构建过程,提高了项目构建的标准化程度。它使用项目对象模型...

    Maven3实战笔记08Maven反应堆

    ### Maven3实战笔记08——Maven反应堆:深度解析与实战应用 #### Maven反应堆的概念与作用 在深入探讨Maven反应堆之前,我们首先需要理解Maven项目是如何组织和构建的。Maven是一种自动化构建工具,它通过定义项目...

    Maven3实战笔记03Maven仓库

    - **依赖管理**:Maven仓库使得依赖管理变得简单,避免了手动下载和配置依赖的繁琐步骤。 - **版本控制**:通过Maven仓库,可以方便地管理和控制不同版本的依赖,确保项目使用的是一致的版本。 - **性能优化**:通过...

    Maven3实战视频教程(14集)

    课程目录: Maven3_01_maven概览 Maven3_02_maven安装的注意事项 Maven3_03_在eclipse中建立简单的项目 Maven3_04_maven的依赖特性 Maven3_05_maven的聚合和继承 Maven3_06_复习maven的基本...Maven3实战笔记 Maven配置

    Maven3实战笔记

    【Maven3实战笔记】 Maven3是一款强大的Java项目管理和集成工具,由Apache软件基金会开发。它通过提供一套标准化的构建、依赖管理和项目信息管理的方式来简化项目的生命周期。本实战笔记将深入探讨Maven3的核心概念...

    Maven3实战笔记04Maven的生命周期和插件

    #### Maven生命周期与插件的关系 在Maven的生命周期中,每个阶段都可以绑定一个或多个插件的目标。当Maven执行到某个阶段时,会自动调用绑定在这个阶段上的插件目标来完成相应的任务。例如,在`compile`阶段,Maven...

    Maven3实战.zip

    《Maven3实战》这本书是Java开发者不可或缺的参考资料,它深入浅出地介绍了Maven这一强大的项目管理和构建工具。在Java开发中,Maven3以其规范化的项目结构、自动化构建和依赖管理等功能,极大地提高了开发效率和...

    Maven入门实战笔记02-基础(2)

    【标题】"Maven入门实战笔记02-基础(2)" 涉及的主要知识点是Maven的基础使用,包括项目的创建、配置文件的理解以及依赖管理等。Maven是一款强大的Java项目管理和集成工具,它帮助开发者统一构建过程,管理项目的依赖...

    maven笔记:maven-overlay-实战笔记

    【标题】:“maven笔记:maven-overlay-实战笔记” 在 Maven 的世界里,"overlay" 是一个重要的概念,主要用于Web项目的构建和部署。Maven overlay 技术允许你将多个项目的输出“重叠”在一起,形成一个新的项目,...

Global site tag (gtag.js) - Google Analytics