从导入的依赖项覆盖Gradle项目配置



我正在开发一个项目,它可以作为许多其他项目的平台。它作为一个图书馆分发。

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

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

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

但它不起作用。

库没有办法规定/覆盖使用项目的依赖项。

如果你想控制其他项目并确保它们使用适当的库/版本,那么你需要编写一个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.");
          }
        });
      });
    });
  }
}

进一步阅读:

  • https://docs.gradle.org/current/userguide/resolution_rules.html
  • https://docs.gradle.org/current/userguide/custom_plugins.html
  • https://blog.gradle.org/guava
  • https://blog.gradle.org/alignment-with-gradle-module-metadata

相关内容

  • 没有找到相关文章

最新更新