sme*_*eeb 2 versioning anti-patterns dependency-management gradle
我最近在代码审查(对于我的代码),并且架构师在我的build.gradle文件中看到了以下内容:
dependencies {
compile 'org.apache.commons:commons-lang3:3.3.2'
compile 'org.apache.httpcomponents:httpclient:4.3.2'
compile 'com.fasterxml.jackson.core:jackson-annotations:2.3.0'
// The problem:
compile 'org.ourcompany:widget-client:LATEST'
}
Run Code Online (Sandbox Code Playgroud)
对此他说:" 使用LATEST是依赖管理的反模式,不要这样做. "我很想问" 为什么? ",但我没有.
我之所以这样做是因为widget-clientJAR版本每月更改多次,并且尝试记住使用最新版本号更新我的Gradle版本变成了一场噩梦.更糟糕的是,我已经失去了很多时间调试和解决我们没有最新widget-client版本的问题.所以这是我的修复.
在我推回并游说我们使用之前LATEST,我想了解情况.也许架构师是正确的,在这种情况下,我想知道为什么,更重要的是,解决方案是什么(所以我不必每周两次更新我的Gradle构建).如果他不对,我想了解原因.
我的另一个想法是,也许有可能标记一个特定的版本widget-client,比如说,STABLE然后我们可以随时拉入它的最新STABLE版本,这可能比它更好LATEST,但也许不是......那个方式,至少,我们总是有一个稳定的客户端版本,并被认为是功能和良好的测试,这使我们远离(潜在的错误)前沿,但仍然给我一个STABLE标签,所以我不必须不断更新deps到特定版本.
这真的都归结为为什么LATEST不好.如果它因为它让你把它固定在前沿(以及因此的错误),那么我认为STABLE解决方案是可行的方法,但我不太了解这些东西来完善具体的解决方案.如果LATEST由于其他原因而不好,或者根本没有坏,那么我也不确定该做什么.思考?
这很糟糕,因为它使构建不可重现.如果几天后使用相同的源运行相同的构建,结果可能会有所不同,因为使用了另一个版本的依赖项.
事情变得更糟,如果这种依赖性依赖于其他库,这些库可能也会改变它们的版本并且可能与您的库发生冲突.
实际上,在使用LATEST时,您不管理依赖项.
| 归档时间: |
|
| 查看次数: |
174 次 |
| 最近记录: |