`

代码依赖的2种情况

阅读更多
代码依赖有2种情况:

第一种是“静态依赖”,这种情况最常见。比如项目A依赖了Spring框架,那么只需要将Spring的jar包引入。每次只要编译A就可以,不需要每次先编译Spring的源码,然后再编译A(因为可以认为Spring是稳定的)

如果Spring升级了,那么项目需要引入新版本的jar包,然后重新编译一次。如果组件的API发生变化,造成项目编译失败,再调整受影响的代码即可

第二种是“动态依赖”,这种情况也很普遍。比如一个项目拆分成了2个工程,ProjectA和ProjectB,其中ProjectA是依赖ProjectB的

2个工程并行开发,那么这个时候A就不能依赖B编译得到的jar包,因为B也不稳定。如果A依赖3月1日的B编译得到的jar包,3月2日B删除了一个方法,那么由于A的依赖的jar包是旧的,无法感知这一变化,当A提交了代码之后,整个项目整体编译就失败了

这种情况下,应该将B设置为A的依赖工程,即A依赖B整个工程,而不是依赖B编译后得到的jar包。然后每次编译时,应该先编译B,再由B编译得到的jar包,对A进行编译

由此可见,当项目变得复杂之后,依赖关系和编译顺序,就会变成一个很头疼的问题(当项目团队规模大的时候,更是如此)。引入maven是一个很好的办法,可以降低依赖管理的复杂度
分享到:
评论
1 楼 kyfxbl 2012-09-18  
补充:

回头想想,这种划分不一定是准确的

这2种依赖,其实本质上都是编译时的依赖,都是静态依赖。区别在于,一种是依赖“稳定”的jar包;另一种是依赖“不稳定”的代码,但是代码编译之后,依赖的仍然是jar包

所以这2种依赖,并没有本质上的区别,只是组织的问题

相关推荐

    基于maven的springboot项目自动化搭建依赖包+源代码+文档说明

    1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合...

    Sonarqube静态代码分析工具 5.1.0最新版 Part2

    通过插件形式,可以支持包括java,C#,C/C++,PL/SQL,Cobol,JavaScrip,Groovy等等二十几种编程语言的代码质量管理与检测 sonarQube能带来什么? Developers' Seven Deadly Sins 1.糟糕的复杂度分布 文件、类、方法等...

    egghead-angular-2-dependency-injection-di-explained:Angular 2依赖注入代码

    此存储库包含Eggheadio Angular 2依赖注入课程的示例代码。 该代码对原始系列进行了一些修改,以与Angular 2最佳实践保持同步。 每个课程都在其自己的分支中,并且包含与该课程相关的代码。 在每个分支中,都有一个...

    基于opencv的4种YOLO目标检测,C++和Python两个版本的实现,仅仅只依赖opencv库就可以运行+源代码+文档说明

    1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合...

    Sonar代码规范

    7. 糟糕的设计 通过sonar可以找出循环,展示包与包、类与类之间的相互依赖关系,可以检测自定义的架构规则 通过sonar可以管理第三方的jar包,可以利用LCOM4检测单个任务规则的应用情况, 检测藕合。

    spring-mvc代码示例+注释+文件解析(可直接运行)

    2、spring-mvc配置文件包括两部分,一个是spring传统配置文件,在代码中为“applicationContext.xml”,主要配置代码中各种bean以及依赖关系;另外一个是spring-mvc特有的配置文件,处理跳转的代理类得(相当于...

    构建任务依赖图,可多作业并行工作.rar

    app内各任务之间耦合严重,边界越来越模糊,经常发生任务相互关联的情况,这对代码质量、功能扩展以及开发效率都会造成很大的影响。 3.对于依赖关系较为复杂的业务任务,传统的任务处理通过层级嵌套功能函数来实现,...

    基于maven依赖,利用scala编写spark,打包jar+源代码+文档说明

    1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合...

    微信小程序开发中经常见的问题和解决方法

    即使js文件里没有任何代码,也需要在js里添加一个空的 Page({ })。注意Page的P要大写。 2:出现“Expecting ‘String,‘Number,‘NULL,‘True....’”’’的错误提示。 (此图片来源于网络,如有侵权,请联系...

    android文件管理代码

    这种情况下发布后,用户还需要安装依赖的软件,非常麻烦。下面介绍在代码中实现资源管理器,只需要一百行左右的一个类即可以最常用的文件选择功能。 2. 相关知识 文件管理器一般以固定大小的对话框的方式出现,使用...

    12种常用设计模式C#代码示例

    2,观察者模式:定义了对象之间的以对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。 3,装饰者模式:动态地将责任附加到对象上。若要扩展功能。装饰着提供 了比继承更有弹性的...

    Android代码-安卓设备屏幕实时捕获工具

    在一个portal里,能够看到我们机器的一些基本情况,比如它是否在锁屏状态,运行是否正常。 如果能够看到屏幕回传的话...... 工具优点 采用ddmlib高效截图方式,在MAC系统下效果尤佳,延时控制在2-3秒内 运行环境 需要...

    Sonarqube静态代码分析工具 5.2.0最新版 Part1

    通过插件形式,可以支持包括java,C#,C/C++,PL/SQL,Cobol,JavaScrip,Groovy等等二十几种编程语言的代码质量管理与检测 sonarQube能带来什么? Developers' Seven Deadly Sins 1.糟糕的复杂度分布 文件、类、方法等...

    用神经网络确定权重的matlab代码-Art2MonitoringHybridSystem:ART-2神经网络和机器监控混合系统

    用神经网络确定权重的matlab代码ART-2神经网络和机器监控混合系统 用于在线群集的Matlab工具 这个贡献是实现了ART-2神经网络和监测混合系统的Matlab库,该系统是一个复杂的人工智能系统(ART-2,EMMoG,VBMoG),...

    玩转模板--自动代码生成工程

    工程中会大量使用apache基金会的通用工具类,使代码更加简洁高效,在其提供的工具类没有的情况下或方法不全(如,对汉字的处理)的情况 增加/扩展某一工具类,一般xxxUtilsExt为文件后缀 随便提一下使用第三方工具类的...

    基于springboot,ant-design-vue-pro的简易后台管理系统+源代码+文档说明

    1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合...

    C#23种设计模式_示例源代码及PDF

    观察者模式: 让多个观察者对象同时监听某一个 观察者模式 观察者模式定义了一种一队多的依赖关系, 主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,使他们能够自动更 新自己。 20、STATE —...

    ofo微信小程序代码实现demo

    以下是关于OFO微信小程序代码实现demo的一些补充说明: 1. 小程序架构及技术栈 OFO小程序采用微信官方的小程序架构,主要涉及WXML/WXSS/JS/JSON等技术。其中WXML用于页面结构布局,WXSS用于页面样式,JS则提供页面逻辑...

    非线性最小二乘问题 的可变投影算法 的MATLAB实现_代码_下载

    代码需要一个函数,用于评估任何 i 的 F(a) 和 dF(a)/da_i(有关更多详细信息,请参阅代码文档)。通常情况下,dF(a)/da_i 是一个稀疏矩阵。在这种情况下,建议返回一个稀疏矩阵。带有 R 的项是可选的,可以用标量...

    基于Bert+overlap_split分段+门控卷积网络的长文本分类源码(解决长距离依赖问题).zip

    1、该资源内项目代码都是经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也...

Global site tag (gtag.js) - Google Analytics