`

代码依赖的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种依赖,并没有本质上的区别,只是组织的问题

相关推荐

    MP代码生成器所需依赖

    MP代码生成器是一种高效实用的工具,主要用于自动化生成常见的Java代码,例如Mybatis-Plus(MP)的Mapper、Service、Controller等层的代码,极大地提高了开发效率。在使用MP代码生成器时,需要确保正确安装并配置了...

    Blender(源代码+依赖库(vc14+vc15)+编译文件)使用说明.docx

    4. **CMake**:虽然在某些情况下,源代码中的`make.bat`脚本可以代替CMake来生成项目文件,但通常推荐使用CMake,因为它可以更好地跨平台管理构建过程。不过,根据提供的信息,这里没有使用CMake。 编译步骤大致...

    自己平时练手的代码,依赖属性和路由事件

    2. **依赖属性的访问:** 一旦注册了依赖属性,就可以像普通属性一样读写它。但要注意,对于依赖属性,我们应该使用 GetValue 和 SetValue 方法,而不是直接访问字段: ```csharp public bool IsEnabled { get...

    DLL依赖检测

    这种情况下,程序会在运行时而不是加载时查找依赖的DLL,这需要额外的处理。 5. **遍历依赖链**:对于每个找到的DLL依赖,递归地重复上述过程,以检测这些DLL可能依赖的其他DLL。 6. **处理找不到的依赖**:如果在...

    候选码最小函数依赖求解系统代码

    2. 函数依赖推理:系统能分析用户输入的函数依赖集,通过Armstrong推理规则(如增广规则、合并规则、消除规则等)来推导出更多的函数依赖。 3. 最小函数依赖集:在推导出所有函数依赖后,系统会找到其中的最小函数...

    Java依赖注入框架Guice2

    依赖注入(Dependency Injection,DI)是一种设计模式,它能够帮助我们降低组件之间的耦合,提高代码的可测试性和可维护性。 Guice2的核心概念是模块(Module),模块定义了一组绑定(Bindings),这些绑定将类型...

    IDEA最新版2020.1的maven工程本地依赖仓库无法使用问题(已解决)

    这是因为IDEA最新版2020.1的maven工程中,默认情况下不会加载本地仓库中的依赖项。因此,需要手动配置maven的设置,使其能够正确加载本地仓库中的依赖项。 知识点二:解决IDEA最新版2020.1的maven工程本地依赖仓库...

    zabbix-agent2离线编译所需的go依赖包

    本文将详细介绍如何离线编译Zabbix Agent 2,并特别关注在没有互联网连接的情况下如何处理Go语言的依赖包问题。Zabbix Agent 2的构建过程通常涉及到Go语言环境和其依赖库的管理。在没有网络的情况下,这可能是一个...

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

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

    Ruby-Rubrowser一个交互式可视化ruby代码依赖图的工具

    它通过解析Ruby代码,提取出其中的模块定义、类和模块的使用情况,然后利用D3(Data-Driven Documents)库将这些信息以有向力图的形式展示出来,帮助开发者更好地理解和管理项目的结构。 在Ruby编程中,理解代码间...

    依赖注入那些事儿

    通过IGame的故事,我们了解到依赖注入(Dependency Injection, DI)是一种软件设计模式,它允许对象之间解耦合,提高代码的可测试性和灵活性。在上述例子中,通过依赖注入,角色类不再硬编码武器的逻辑,而是依赖...

    spring依赖注入三种方式 测试源码

    在Spring框架中,依赖注入(Dependency Injection,简称DI)是一种重要的设计模式,它使得对象之间的耦合度降低,提高了代码的可测试性和可维护性。本文将深入探讨Spring中的三种依赖注入方式,并结合源码分析其工作...

    vue动态加载外部依赖js代码实现

    特别是在构建大型Vue应用程序时,可能会遇到需要按需加载某些功能的情况,例如第三方库、API接口等。本文将详细介绍如何通过创建一个Vue组件来实现动态加载外部JS文件的功能,并探讨其原理与应用场景。 #### 关键...

    dll文件依赖情况查看器

    DLL(Dynamic Link Library)文件是Windows操作系统中一种重要的共享库,它包含了一组可执行代码和数据,可供多个程序同时使用。"dll文件依赖情况查看器"是一个实用工具,专门用于帮助用户分析和查看特定DLL文件所...

    [代码大全(第2版)].(Code.Complete,2nd).Steve.McConnell.英文文字版.pdf

    ### 《代码大全(第2版)》知识点总结 #### 一、书籍基本信息 - **作者**:Steve McConnell - **出版社**:Microsoft Press - **出版年份**:2004年 - **ISBN**:0-7356-1967-0 - **类别**:计算机软件开发 #### ...

    Spring 解决循环依赖的 3 种方式.docx

    2. 属性setter循环依赖(Setter-based circular dependency) 与构造器不同,setter注入的循环依赖可以通过“半初始化对象”(即只完成了实例化,但尚未注入依赖的对象)来解决。Spring在创建Bean时会检查是否处于...

    c# 依赖注入 控制反转

    - **Interface Injection(接口注入)**:通过对象的接口来传递依赖项,这种方式适用于依赖项比较少的情况。 - **Constructor Injection(构造函数注入)**:通过对象的构造函数来注入依赖项,这种方式可以确保对象...

    SpringMVC 依赖

    7. **AspectJ**: SpringAOP(面向切面编程)依赖于 AspectJ,它允许我们在不修改代码的情况下添加额外的行为,如日志记录、事务管理等。 8. **Hibernate 或 MyBatis**: 这些是常用的持久层框架,SpringMVC 可以与...

    C++ 依赖注入

    C++依赖注入是一种设计模式,它对于简化软件设计、控制依赖关系、降低耦合度、提高代码的内聚度以及方便进行单元测试具有重要作用。依赖注入的核心思想是将依赖对象的创建和使用分离,通过第三方(例如容器)在对象...

    Spring系列之依赖注入的三种方式.docx

    在 Spring 框架中,依赖注入(Dependency Injection,简称 DI)是一种关键的设计模式,它允许我们解耦组件之间的依赖关系,使得代码更加灵活,易于测试和维护。依赖注入的三种主要方式是:setter 方法注入、构造器...

Global site tag (gtag.js) - Google Analytics