衝突解決 假設你想在應用中使用 some_package 和 other_package,並且它們依賴於不同版本的 url_launcher。於是我們便有了潛在的衝突。避免這種情況的最好方法是 package 的作者在指定依賴項時使用 版本範圍 而非特定版本。 dependencies: url_l ...
衝突解決
假設你想在應用中使用 some_package
和 other_package
,並且它們依賴於不同版本的 url_launcher
。於是我們便有了潛在的衝突。避免這種情況的最好方法是 package 的作者在指定依賴項時使用 版本範圍 而非特定版本。
dependencies:
url_launcher: ^5.4.0 # Good, any version >= 5.4.0 but < 6.0.0
image_picker: '5.4.3' # Not so good, only version 5.4.3 works.
如果 some_package
聲明瞭以上依賴,並且 another_package
聲明瞭一個相容的 url_launcher
依賴項,如 '5.4.6'
或 ^5.5.0
, pub 能夠自動解決衝突問題。 Gradle modules 和 CocoaPods 也是用類似的方式解決平臺依賴的。
即使 some_package
和 another_package
聲明瞭不相容的 url_launcher
版本,它們實際上仍可能以相容的方式使用 url_launcher
。在這種情況下,可在 pubspec.yaml
文件中添加一個依賴覆蓋聲明來強制使用特定版本,從而處理衝突。
為了強制使用版本為 5.4.0
的 url_launcher
,你可以對應用的 pubspec.yaml
文件做如下更改:
dependencies:
some_package:
another_package:
dependency_overrides:
url_launcher: '5.4.0'
如果依賴衝突項不是 package 自身,而是如 guava
這樣特定於 Android 的庫,那麼依賴的覆蓋聲明必須添加到 Gradle 的構建邏輯中。
為了強制使用版本為 28.0
的 guava
,你可以對 android/build.gradle
文件做如下更改:
configurations.all {
resolutionStrategy {
force 'com.google.guava:guava:28.0-android'
}
}
CocoaPods 目前尚不提供依賴項覆蓋功能。