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)就是X是A的第三层依赖,A->项目D->X(1.5)则是X是A的第二层依赖。那么根据原则1,X1.5版本会被优先选择使用。
6. 可选依赖
当一个项目出现了依赖可选——optional为true的时候说明,只有当前这个项目依赖于此可选依赖,而别的项目需要此项目的时候,此项目的可选依赖并不会像其他依赖类型似地,可选依赖不会传递给别的项目。在别的项目需要相关的可选依赖的时候还需要在pom.xml文件中显示的进行声明。其实可选依赖并不倡导,可选依赖就意味着此模块的职能比较复杂,不单一。一般替使用者完成了不该完成的功能。有点违背了Java设计模式的职能单一原则。
7. 依赖最佳化实现
1):归类依赖:就拿咱们这个邮件模块来说,用到了Spring2.5.6,其中用到了Spring项目的不同模块,现在开源的项目越来越讲究模块化,模块职能单一化。所以看到往往一个开源项目有很多jar,用到那个模块引入哪个jar,Spring、Hibernate都是这么做的。那么假如我们现在的项目要升级版本,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,而A与C就形成了间接依赖,而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阐述了Maven的pom.xml文件的一些内容——坐标。之后介绍了一下项目依赖的概念。
分享到:
相关推荐
Maven3实战笔记(整合)
Maven3实战笔记 Maven3实战笔记 Maven3实战笔记 Maven3实战笔记
Maven3实战笔记05——仓库依赖解析与插件解析。
Maven3实战笔记02——项目需求和模块分析。
Maven3实战笔记04——Maven的生命周期和插件。
Maven3实战笔记07——继承的介绍。
Maven3实战笔记(全) 从安装配置,到仓库依赖,到集成测试,到插件管理,到构建web 作者风趣幽默的介绍了maven3的使用 强烈推荐
Maven3实战笔记06——聚合的介绍。
Maven3实战笔记08——Maven反应堆。
Maven3实战笔记
Maven3实战笔记10——使用Maven进行测试。
课程目录: Maven3_01_maven概览 Maven3_02_maven安装的注意事项 Maven3_03_在eclipse中建立简单的项目 Maven3_04_maven的依赖特性 Maven3_05_maven的聚合和继承 Maven3_06_复习maven的基本...Maven3实战笔记 Maven配置
Maven3实战笔记——03Maven仓库。
Maven3实战笔记,介绍maven构建项目的步骤以及相关内容
《Maven实战完》完整高清版-带目录-许晓斌.pdf
NULL 博文链接:https://waddy.iteye.com/blog/1990279
1: 通过配置MAVEN_HOME 和 %% %MAVEN_HOME%\bin 然后进行mvn -version 测试 掌握 -Xms 与 -Xmx的相关配置 2: Maven目录分析: 2.1: bin: 含有mvn运行的脚本 2.2: boot:含有plexus-classworlds类加载器框架 ...
NULL 博文链接:https://ln-ydc.iteye.com/blog/1825185
maven学习笔记maven学习笔记maven学习笔记