屏上得来终觉浅,绝知此事要躬行


总结:

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px ".PingFang SC"; color: #454545 }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "Helvetica Neue"; color: #454545 }
span.s1 { font: 12.0px "Helvetica Neue" }
span.s2 { font: 12.0px ".PingFang SC" }

1.maven项目可以简单的通过在pom文件写入依赖的ID+版本号去依赖目标maven项目而且可以直接使用 无需import但被依赖项目每次更新之后都要重新打包!
2.C->B B->A 此时如果C中想依赖A和B 仅需在pom中配置B即可 会自动导入A

3.当在B 中对A的依赖声明为optional    <optional>true</optional> 此时C引用B时,Maven并不会将A作为transitive依赖自动加入
4.C->B->A1 C->A2. 此时C中默认导入离得“近”的项目 此时导入A2
5.B->A1 B->A2 在我的环境中(IDEA2017)默认导入后写的pom 依赖
6.接上C->B 此时显然C中会导入4中的那个依赖 即:后写的依赖
7.B->C->A1 B->D->A2 此时B中会导入先写的pom 依赖中的A 即:先写C 导入A1 先写B导入A2


测试点1:本地Maven项目之间的引用

当前maven项目B 依赖另外两个maven项目A和C A/C项目新建之后B还无法引入依赖,一定要项目install之后 B才能读取依赖 并引入jar包

TestClassA TestClassC 均为上述两个maven项目中的类 可见现在已经可以直接使用这两个类


测试点2:B->A         "->"表示依赖于   C->B 那么C中是否可以直接引用A  而无需在pom文件中引入A

当在B 中对A的依赖声明为optional    <optional>true</optional> 此时C引用B时,Maven并不会将A作为transitive依赖自动加入

B->A

C->B

可见此时A的jar包已经自动导入进当前依赖中了 而pom中仅仅描述了对B的依赖  显然项目可以直接使用A 如下图

测试点2成立


测试点3:B->A1      C->B 且C->A2    A2表示A1的升级版本 此时C调用A中类如何取舍

可以看到此时自动将之前的testClassA:1.0-SNAPSHOT 替换掉了

显然此时不会冲突自动使用用新的TestClassA


测试点4 :B->A1 & B->A2   C->B    此时项目C的External Libraries会怎么样? 此时再去使用TestClassA 怎么办?

可以看到此时虽然B依赖了两个版本的A  但是项目只选取了2.0

见证奇迹的时刻,调换两个依赖在pom中的位置,此时依赖变成了1.0  =  =、还以为是默认选取高版本   看来是后来者居上

看看此时C里的情况

case1:   C 依赖B  显然会引来后来居上的那个版本 不过项目B需要重新install一发 C才能反映过来B中的变化

case2:c 依赖b 并且依赖a2  该case排除了后来居上的因素 项目C此时依赖的是2.0 可见此时项目会选取更加“近”的版本!


测试点5 B->C->A1    B->D->A2   此时如何处理A?还是按照后来居上?

=======遇到了玄学问题    马丹  C->B->A  C中自动导入A     反过来B->C->A  B中只有C没有A   ?????? ===================

====神tm囧  还大呼小叫的 让室友来帮忙看这个玄学问题  结果是因为C里面的代码有报错  maven编译的时候 根本不能打成jar包  B找到的还是本地库中的老包  所以不显示A  这你妹 以后遇到玄学问题  不要过于自信 多去找找自己代码的原因  稳住! maven编译的那个错误也是不太明显,======

好了 我们继续测试  可以看到此时项目B默认导入的是上面的那个项目的依赖A  即A2

在上面的依赖中添加<exclusion>  此时项目C导入的依赖为A1


测试点6:在项目中调用依赖项目的函数

此时项目B依赖C和D  在方法中调用了C和D的两个方法 分别使用了CD各自依赖的A中的方法 此时项目导入的A为1版本

C中方法的A为2版本  此时运行程序会报错  显然此时无法找到A2中的方法

=========== 修仙去了,明天再做总结======================

Maven实战1的更多相关文章

  1. Maven实战:Maven生命周期

    前言 之前有写过一篇文章Maven实战,介绍了Maven的一些基本概念,以及对于一个初学者而言的Maven基础知识,当时在我看来掌握了这些基本是够用的. 随着工作的深入,越来越感觉对于Maven的理解 ...

  2. maven实战(01)_搭建开发环境

    一 下载maven 在maven官网上可下载maven:http://maven.apache.org/download.cgi 下载好后,解压.我的解压到了:D:\maven\apache-mave ...

  3. Maven实战(六)依赖

    我们项目中用到的jar包可以通过依赖的方式引入,构建项目的时候从Maven仓库下载即可. 1. 依赖配置    依赖可以声明如下: <project> ... <dependenci ...

  4. 学习笔记——Maven实战(四)基于Maven的持续集成实践

    Martin的<持续集成> 相信很多读者和我一样,最早接触到持续集成的概念是来自Martin的著名文章<持续集成>,该文最早发布于2000年9月,之后在2006年进行了一次修订 ...

  5. 学习笔记——Maven实战(六)Gradle,构建工具的未来?

    Maven面临的挑战 软件行业新旧交替的速度之快往往令人咂舌,不用多少时间,你就会发现曾经大红大紫的技术已经成为了昨日黄花,当然,Maven也不会例外.虽然目前它基本上是Java构建的事实标准,但我们 ...

  6. 学习笔记——Maven实战(七)常用Maven插件介绍(上)

    我们都知道Maven本质上是一个插件框架,它的核心并不执行任何具体的构建任务,所有这些任务都交给插件来完成,例如编译源代码是由maven-compiler-plugin完成的.进一步说,每个任务对应了 ...

  7. 学习笔记——Maven实战(八)常用Maven插件介绍(下)

    我们都知道Maven本质上是一个插件框架,它的核心并不执行任何具体的构建任务,所有这些任务都交给插件来完成,例如编译源代码是由maven- compiler-plugin完成的.进一步说,每个任务对应 ...

  8. Maven实战之Quick Start

    Introduction Maven是一个异常强大的构建工具,能够帮我们自动化构建过程,从清理.编译.测试到生成报告,再到打包和部署.通过Maven,我们只需要输入简单的命令(如mvn clean i ...

  9. 【转】Maven实战(九)---模块聚合和继承

    原博文出自于:http://blog.csdn.net/liutengteng130/article/details/47001831   感谢! 类之间有聚合和继承关系,Maven也具备这样的设计原 ...

  10. 学习笔记-[Maven实战]-第三章:Maven使用入门(1)

    说明:[Maven实战]一书还介绍了怎么样手工创建Maven工程,学习这本书是为了能尽快在工作中使用,就忽略了手工建工程的部分 如果想了解这部分的内容,可以自己看看书 开始: 1.新建一个maven工 ...

随机推荐

  1. Cognos报表调度与作业管理

    本文针对Cognos的报表调度和作业管理做案例分析.为了测试报表定时调度功能,本文将报表定时输出到指定的归档目录. 1. 测试环境 Cognos  V11.0 2. 设置档案文件根目录 Cognos报 ...

  2. Spring-MVC开发步骤(入门配置)

    Spring-MVC开发步骤(入门配置) Step1.导包 spring-webmvc Step2.添加spring配置文件 Step3.配置DispatcherServlet 在web.xml中: ...

  3. 边看MHA源码边学Perl语言之一开篇

    边看MHA源码边学Perl语言之一开篇 自我简介 先简单介绍一下自己,到目前为此我已经做了7年左右的JAVA和3年左右php开发与管理,做java时主要开发物流行业的相关软件,对台湾快递,国际快递,国 ...

  4. TensorBoard使用

    关于TensorBoard的安装是在安装Tensorflow的过程中就已经默认安装好了,所以安装了Tensorflow就不需要再安装TensorBoard,直接使用就可以了. 具体的使用方法: 命令行 ...

  5. Jsp与beetl的比较

    首先介绍一下模板引擎的概念,是为了使用户界面与业务数据分离而产生的,它可以生成特定格式的文档,用于网站的模板引擎,就会生成一个标准的html文档. Jsp全名是JavaServer Page,中文名叫 ...

  6. 软件工程(GZSD2015)第二次作业成绩

    作业评分表 姓名 提交 语言 界面 PSP(3) CODE(4) 代码规范(2) 改进(1) 基本得分 提交时间 原始总得分 相对得分 最终得分 涂江凤 20150407 C CLI 3 4 2 1 ...

  7. java四则运算生成器

    题目描述: 从<构建之法>第一章的 "程序" 例子出发,像阿超那样,花二十分钟写一个能自动生成小学四则运算题目的命令行 "软件",满足以下需求: 除 ...

  8. 201521123034《Java程序设计》第八周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 2. 书面作业 本次作业题集集合 List中指定元素的删除(题目4-1) 1.1 实验总结 答:这题是在课堂上 ...

  9. 201521123098 《Java程序设计》第7周学习总结

    1. 本周学习总结 以你喜欢的方式(思维导图或其他)归纳总结集合相关内容. 2. 书面作业 1. ArrayList代码分析 1.1 解释ArrayList的contains源代码 该方法调用了ind ...

  10. 201521123017 《Java程序设计》第13周学习总结

    1. 本周学习总结 2. 书面作业 Q1.网络基础 1.1 比较ping www.baidu.com与ping cec.jmu.edu.cn,分析返回结果有何不同?为什么会有这样的不同? 1.2 te ...