我目前正在尝试为构建(ala Maven,Ivy,NuGet)采用依赖管理,并为共享模块创建内部存储库,我们在十几个企业范围内。这种构建技术的主要卖点是什么?到目前为止,我有:
- 简化了分发和导入共享模块的过程,尤其是版本升级。
- 要求精确记录共享模块的依赖性。
- 从源代码管理中删除共享模块,加快并简化检出/检入(当您的应用程序具有20多个库时,这是一个实际因素)。
- 使您可以更好地控制或了解组织中使用了哪些第三方库。
我有没有卖点?是否有研究或文章提供改进指标?
我目前正在尝试为构建(ala Maven,Ivy,NuGet)采用依赖管理,并为共享模块创建内部存储库,我们在十几个企业范围内。这种构建技术的主要卖点是什么?到目前为止,我有:
我有没有卖点?是否有研究或文章提供改进指标?
Answers:
我不能肯定100%的积极性。这是一些负面因素
您通常最终会向不稳定的第三方服务器/端点添加依赖项。
我曾在凉亭上发生过某些依赖项的回购被删除或移动的情况。因此,一个新的开发人员出现了,克隆了我的仓库,输入了类型
bower install
并得到了无法访问的仓库错误。相反,如果我将第3方代码签入我的仓库中,该问题就会消失。
就像OP所建议的,如果您要从运行的服务器上保留的副本中提取dep,则可以解决此问题。
对于菜鸟来说更难。
我与很少有命令行经验的美术专业学生一起工作。他们使用Processing,arduino,Unity3D进行艺术创作,并且很少掌握技术知识。他们想使用我写的一些HTML5 / JavaScript。由于凉亭而采取的步骤
npm install -g bower
)bower install
(最终得到我们的依赖)如果仅将文件检入github存储库中,则可以删除第2-5步。这些步骤对您我来说听起来超级容易。为了学生,他们非常困惑,他们想知道所有的步骤,其中,什么他们为这可能是很好的学习可能,但完全是垂直类的话题,所以可能很快被遗忘。
拉动时又增加了一步。
我执行过多次git pull origin master
,然后测试我的代码,这需要花5到10分钟的时间来记住,我需要键入bower install
以获得最新的Dep信息。我敢肯定,可以通过一些拉脚本钩子轻松解决。
它使git分支更加困难
如果两个分支具有不同的部门,则您会感到困惑。我想你可以bower install
每次都打字git checkout
。速度非常重要。
至于您的正面看法,我认为每个例子都有反例
简化了分发和导入共享模块的过程,尤其是版本升级。
与什么?分发当然并不容易。拉回购而不是20个回购并非易事,而且更有可能失败。参见上面的#1
从源代码管理中删除共享模块,加快并简化检出/检入(当您的应用程序具有20多个库时,这是一个实际因素)。
相反,这意味着您依赖他人进行修复。这意味着,如果您的部门是从第三方来的,并且您需要修复错误,则必须等待他们应用补丁。更糟糕的是,您可能无法仅获取所需的版本以及您的补丁,而必须获取最新的版本,而该版本可能与您的项目不向后兼容。
您可以通过分别克隆其存储库来解决该问题,然后将项目部门指向副本。然后,您将所有修复程序应用于副本。当然,如果您只是将源复制到您的仓库中,您也可以这样做
使您可以更好地控制或了解组织中使用了哪些第三方库。
这似乎是有争议的。只需要求开发人员将第3方库放在下方的自己的文件夹中<ProjectRoot>/3rdparty/<nameOfDep>
。轻松查看使用了什么第三方库。
我并不是说没有积极的一面。我所在的最后一支球队拥有> 100个3rdparty部门。我只是指出,这不是所有的玫瑰。例如,我正在评估是否应该摆脱凉亭。
install
每次结帐时的需求似乎都是设计缺陷。它在构建项目时应检查其配置:如果有更改,则应从头开始进行重建。另外,移动存储库与Maven无关,因为它从Maven存储库中提取工件,Maven存储库存储工件,而不是带有代码的实际存储库。如果您将其发布在Maven存储库中,则只能进行更改,artifactId
并且只能groupId
在其下一版本中进行。因此,您的第一点和第四点与Maven特别无关。#3可以替换为mvn clean
(有时)
看一看十二因子应用程序
特别要了解他们对依赖项的看法。您会注意到,良好的设计提供了一种用于定位依赖项的声明性机制,在Java中,这通常是通过Maven实现的。Ivy和NuGet可以很好地工作,但是Maven目前是该领域的领导者,而Ivy无疑是艰苦的工作。
如果您遵循Maven发行过程(在正式发行版发布之前就制作快照,切勿尝试覆盖以前的发行版,请使用Nexus或Artifactory等适当的存储库管理器),那么您应该拥有一个顺畅的构建过程。
一旦有了一个可靠的声明式构建过程,它便为其他良好实践打开了大门,例如与Jenkins进行持续集成,与Sonar进行持续代码分析,并且您会发现自己正在寻找使用git的更好的版本控制分支策略。
以上各项均基于Maven核心。如今,这几乎是明智的决定。
在我们的前十名中排名第一的是...
(击鼓)
每个开发人员都使用完全相同的所有依赖项版本进行构建,因此您不必怀疑要在生产环境中部署什么。