【问题标题】:Override Gradle project configuration from imported dependency从导入的依赖项覆盖 Gradle 项目配置
【发布时间】:2020-06-17 03:31:09
【问题描述】:

我正在开发一个项目,作为许多其他项目的平台。它作为库分发。

我面临以下问题:我无法控制其他项目,我希望拥有一致的日志记录格式。为了做到这一点,我想要在我的项目的 build.gradle 中声明特定的日志依赖版本,以便我可以操作它们。

我应该如何编写我的 Gradle 配置,以便它可以覆盖或强制一个特定的依赖版本?我正在使用 Gradle 6.2.1,我已经尝试过

api(group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.13.0') {
        force = true
    }

但它不起作用。

【问题讨论】:

    标签: java gradle build configuration dependency-management


    【解决方案1】:

    库无法指定/覆盖使用项目的依赖项。

    如果你想控制其他项目并确保它们使用适当的库/版本,那么你需要编写一个 Gradle 插件来覆盖项目的依赖解析。

    对于您的用例(如果我理解正确的话),插件可能很简单:

    public class LoggingResolutionPlugin implements Plugin<Project> {
    
      @Override
      public void apply(Project project) {
    
        project.getConfigurations().all((configuration) -> {
          configuration.resolutionStrategy((resolutionStrategy) -> {
            resolutionStrategy.eachDependency((dependency) -> {
    
              ModuleVersionSelector requested = dependency.getRequested();
              if(requested.getGroup().equals("org.apache.logging.log4j")
              && requested.getName().equals("log4j-core")) {
                 dependency.useVersion("2.13.0");
                 dependency.because("Library must use 2.13.0 because reasons.");
              }
            });
          });
        });
      }
    }
    

    进一步阅读:

    【讨论】:

      猜你喜欢
      • 2020-01-13
      • 2016-11-29
      • 2014-03-18
      • 1970-01-01
      • 2017-04-16
      • 1970-01-01
      • 2016-07-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多