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

Maven3实战笔记02坐标和依赖--2

阅读更多

5.  依赖调节

假如现在有这么一个情况,项目A->(依赖)项目B->项目C->X(1.0),项目A->项目D->X(1.5)。那么项目A就不得不依赖于项目X。那我们这个项目A到底是下载X项目的哪个版本呢?Maven3对于这种情况有2个原则,第一个就是路径优先原则,第二个就是在配置文件pom.xml中谁先配置在前面谁解析使用

项目路径就是指依赖的层级比如A->(依赖)项目B->项目C->X(1.0)就是XA的第三层依赖,A->项目D->X(1.5)则是XA的第二层依赖。那么根据原则1X1.5版本会被优先选择使用。

6.  可选依赖

当一个项目出现了依赖可选——optionaltrue的时候说明,只有当前这个项目依赖于此可选依赖,而别的项目需要此项目的时候,此项目的可选依赖并不会像其他依赖类型似地,可选依赖不会传递给别的项目。在别的项目需要相关的可选依赖的时候还需要在pom.xml文件中显示的进行声明。其实可选依赖并不倡导,可选依赖就意味着此模块的职能比较复杂,不单一。一般替使用者完成了不该完成的功能。有点违背了Java设计模式的职能单一原则。

7.  依赖最佳化实现

1):归类依赖:就拿咱们这个邮件模块来说,用到了Spring2.5.6,其中用到了Spring项目的不同模块,现在开源的项目越来越讲究模块化,模块职能单一化。所以看到往往一个开源项目有很多jar,用到那个模块引入哪个jarSpringHibernate都是这么做的。那么假如我们现在的项目要升级版本,Spring2.5.6已经不能满足了,要升级到3.0版本,怎么办?一个个去改以来的版本号?恩,也是个办法,不过有点笨拙。有另一个办法,不错,就跟Spring配置文件引入的那个资源文件原理一样,声明一个常量信息,所有用到的地方都用这个常量信息就够了,如下是我们修改后的配置

 

 

<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">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.liuyan.account</groupId>
	<artifactId>MavenAccount-email</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<properties>
		<springversion>2.5.6</springversion>
		<junitversion>2.5.6</junitversion>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-core</artifactId>
			<version>${springversion}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-beans</artifactId>
			<version>${springversion}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>${springversion}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context-support</artifactId>
			<version>${springversion}</version>
		</dependency>
		<dependency>
			<groupId>javax.mail</groupId>
			<artifactId>mail</artifactId>
			<version>1.4.1</version>
		</dependency>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.7</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>com.icegreen</groupId>
			<artifactId>greenmail</artifactId>
			<version>1.3.1b</version>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<build>
		<resources>
			<resource>
				<directory>src/main/resource</directory>
			</resource>
		</resources>
	</build>
</project>

 2):排除依赖:假如现在有这么一个场景项目A->项目B-项目C,AC就形成了间接依赖,而C呢却又老是不稳定。那么构建项目A的时候如果下载了项目C的非稳定版本是很不安全的。那么不妨这么做,在项目A的依赖中肯定是要配置项目B的,在配置项目B的同时,强制让项目B排斥项目C,让A再加个依赖就是A用着较为稳定的版本C。配置如下

		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-beans</artifactId>
			<version>${springversion}</version>
			<exclusions>
				<exclusion>
					<groupId>org.apache</groupId>
					<artifactId>logging</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
		<dependency>
			<groupId>org.apache</groupId>
			<artifactId>logging</artifactId>
			<version>1.1.0</version>
		</dependency>

 使用IDE工具可以显示依赖图,当然可以通过命令

//显示依赖项
mvn dependency:list

//显示依赖树
mvn dependency:tree

//依赖项分析-找出那些依赖项没用
mvn dependency:analyze

 8.  总结

我们这次开发了一个模块介绍了一下Maven的构建特性和jar包依赖特性。之后结合IDE阐述了Mavenpom.xml文件的一些内容——坐标。之后介绍了一下项目依赖的概念。

 

2
1
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics