我最近在代码审查中(对于我的代码),并且架构师在我的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'
}
对此他说:“使用LATEST
是一种依赖管理反模式,不要这样做。”我很想问“为什么?” em>“,但我没有。
我之所以这样做是因为widget-client
JAR版本每月更改多次,并且尝试记住使用最新版本号更新我的Gradle版本变成了一场噩梦。更糟糕的是,我已经失去了很多时间调试和排除问题,因为我们没有最新的widget-client
版本。所以这是我的修复。
在我使用LATEST
推回并为我们游说之前,我想了解情况。也许建筑师是正确的,在这种情况下,我想知道为什么,更重要的是,解决方案是什么(所以我不需要更新我的Gradle每周建两次)。如果他不对,我想了解原因。
我的另一个想法是,或许可以将特定版本的widget-client
标记为STABLE
,然后我们可以随时提取最新的STABLE
它的版本,其中或许比LATEST
更好,但也许不是......这样,至少,我们总是有一个稳定的客户版本并被视为功能齐全,经过充分测试,让我们远离(潜在的错误)前沿,但仍然给我一个STABLE
标签,所以我不必继续更新特定版本的代码。
这真的归结为LATEST
为什么不好。如果它因为它让你固定在流血的边缘(因而也就是错误),那么我认为STABLE
解决方案是可行的方法,但我对这些东西知之甚少,以找出具体的解决方案。如果LATEST
由于其他原因而不好,或者根本没有坏,那么我不知道该怎么做。想法?
答案 0 :(得分:6)
这很糟糕,因为它使构建不可重现。如果几天后使用相同的源运行相同的构建,结果可能会有所不同,因为使用了另一个版本的依赖项。
事情变得更糟,如果这种依赖性依赖于其他库,这些库可能会改变它们的版本并且可能与你的库发生冲突。
事实上,当您使用LATEST时,您不会管理依赖项。