美文网首页
2022-04-12 dependency_overrides

2022-04-12 dependency_overrides

作者: 我是小胡胡分胡 | 来源:发表于2022-04-12 15:51 被阅读0次

    dependency_overrides 用来解决package 依赖冲突

    假设你想在应用中使用 some_packageother_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 modulesCocoaPods 也是用类似的方式解决平台依赖的。

    即使 some_packageanother_package 声明了不兼容的 url_launcher 版本,它们实际上仍可能以兼容的方式使用 url_launcher。在这种情况下,可在 pubspec.yaml 文件中添加一个依赖覆盖声明来强制使用特定版本,从而处理冲突。

    为了强制使用版本为 5.4.0url_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 目前尚不提供依赖项覆盖功能。

    具体案例

    主工程:

    name: fairdemo
    description: A new Flutter project.
    
    publish_to: 'none' # Remove this line if you wish to publish to pub.dev
    
    version: 1.0.0+1
    
    environment:
      #允许不开启nullsafety
      sdk: ">=2.0.0-dev.68.0 <3.0.0"
      #2.12.0以上,所有依赖package必须要升级nullsafety
    #  sdk: ">=2.12.0 <3.0.0"
    
    dependencies:
      flutter:
        sdk: flutter
    
      fair:
        path: ../fair/fair
    
    dependency_overrides:
      fair_version:
        path: ../fair/flutter_version/flutter_1_22_4
    
    
    dev_dependencies:
      flutter_test:
        sdk: flutter
      build_runner: ^1.4.0
      fair_compiler:
        path: ../fair/compiler
    
    
    flutter:
      uses-material-design: true
    
    
    
    默读英文不自然的舌头就大了起来
    flutter 1.17.3 
    
      dependencies:
       
        meta: 1.1.8
    
    
    fair_compiler
    
      dependencies:
       
        analyzer: ^0.41.2
    
    
    analyzer-0.41.2
    
    
      dependencies:
       
        meta: ^1.2.3
    
    

    所以,flutter sdk 的meta版本和 fair_compiler 依赖的analyzer-0.41.2 下的 meta版本

    不一致
    导致flutter pub get失败

    analyzer:^0.41.2
    >=0.41.2,<1.0.0
    
    image.png

    fair_compiler依赖的analyzer0.41.2是非空安全版本的最后一个版本

    meta: ^1.2.3
    >=1.2.3,<2.0.0
    
    image.png

    为了能使用到fair_compiler ->analyzer0.41.2->meta>=1.2.3,<2.0.0
    flutter1.17.3 meta: 1.1.8
    flutter1.22.5 meta: 1.3.0-nullsafety.3
    flutter 2.2.2 meta: 1.3.0
    flutter 2.5.0 meta: 1.7.0

    \color{red} {因为flutter1.17.3的meta和fair的fair_compiler ->analyzer0.41.2->meta>=1.2.3,<2.0.0不匹配}

    所以,这个分支的fair不支持flutter1.17.3

    image.png

    https://docs.flutter.dev/development/tools/sdk/releases?tab=macos

    切换到1.22.4试试

    果然好了

    image.png

    flutter pub run build_runner build

    image.png

    报的这个error是什么意思

    image.png

    按照环境fair接入MacOS-环境准备
    环境应该没什么问题
    1、flutter doctor

    image.png

    2、安装ndk、和cmake


    image.png image.png

    相关文章

      网友评论

          本文标题:2022-04-12 dependency_overrides

          本文链接:https://www.haomeiwen.com/subject/uacnsrtx.html