zoukankan      html  css  js  c++  java
  • 软件工程中的依赖管理

    原创文章转载请注明出处:@协思, http://zeeman.cnblogs.com
     

    软件工程是多人合作的结果,我们做项目的时候,经常需要使用前人的成果或者成熟的第三方包,而这些第三方包又可能再引用第四方包,并且可能存在版本上的区别,这就形成了依赖链。

     
    手工管理依赖是相当麻烦且易出错,因此各大平台都有自己的手段。比如centos下的yum, debian下的apt-get,可以全自动安装各种你需要的包。解决思路也很简单,就是大家把要使用的依赖放到共同的仓库中,谁需要就来仓库拿。
     
    各大语言也有自己的依赖管理机制,java下使用maven, .net使用nuget, node.js使用npm,go语言使用go get,要达到的目的一样,但手段各有差别。
     
    maven使用xml来描述,在eclipse中有可视化插件辅助。maven本质上是一个微框架,它的核心并不执行任何具体的构建任务,所有这些任务都交给插件来完成,插件本身可以包罗万象,完成非常丰富的功能。可以使用nexus来构建私有仓库。
     
    .net早期没有依赖管理,可能是因为.net项目规模有限,以及大家喜欢从微软拿来主义,早期开源生态不太繁荣,不像java那样百花齐放。.net现在使用nuget管理依赖,配合强大的vs ide,非常方便快捷。并且自建nuget仓库也就是简单的网站,相比maven,要轻量许多。当然,maven可以完成的事情更多,比如自动构建。
     
    npm使用json来描述依赖,天生的优势就是简单明了,没有xml那些繁杂的tag。npm命令使用相当灵活,安装、升级、全局、私有都考虑到了,特别是它的依赖可以使用版本大于或者小于某个版本,或者直接使用最新版本,很有特色。如果你想做npm私有库,就比较麻烦了,麻烦在两个地方:安装couchdb和同步官方仓库。我自己做了全量同步(因网络原因排除大包), 有同学提出了增量按需同步,有兴趣者自行研究。
     
    go包依赖中在相同gopath中是没有版本管理的,之前我在go的笔记中也得到过,使用方式和npm差不多,但目录式的管理有点类似java的package命名,编译时所有依赖静态链接到可执行文件,这对第三方商业包的发展不利。
  • 相关阅读:
    【Android API】Android 4.1 API官方文档详解
    【Android开发】Android Host详解(翻译自官方文档)
    Android调试桥-Android Debug Birdge详解
    冰淇淋三明治 (Android 4.0)介绍
    Android 4.1的新特性介绍
    【Android UI】如何做一个纯粹的Android app UI 设计
    【Android UI】Android颜色系大全
    【Android开发】交互界面布局详解
    阿里卖电影票 架构思路
    操作系统 虚拟内存 、分段、分页的理解
  • 原文地址:https://www.cnblogs.com/zeeman/p/3969521.html
Copyright © 2011-2022 走看看