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

问题描述 投票:0回答:1

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

我面临以下问题:我无法控制其他项目,并且我希望具有一致的日志记录格式。为了做到这一点,我想要有特定的日志记录依赖项版本,这些版本在项目的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个回答
0
投票

库无法指示/覆盖消耗项目的依赖项。

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

进一步阅读:

© www.soinside.com 2019 - 2024. All rights reserved.