Переопределить конфигурацию Gradle проекта из импортированной зависимости - PullRequest
0 голосов
/ 04 марта 2020

Я разрабатываю проект, который служит платформой для многих других проектов. Он распространяется как библиотека.

Я столкнулся со следующей проблемой: у меня нет контроля над другими проектами, и я хочу иметь согласованный формат ведения журнала. Чтобы сделать это, я хочу указать c версий журналируемых зависимостей, которые объявлены в build.gradle моего проекта, чтобы я мог ими управлять.

Как мне написать свою конфигурацию Gradle, чтобы она могла переопределять или принудительно указывать c версию зависимости? Я использую Gradle 6.2.1 и пробовал

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

, но он не работает.

1 Ответ

0 голосов
/ 05 марта 2020

У библиотеки нет способа диктовать / переопределять зависимости потребляющего проекта.

Если вы хотите управлять другими проектами и убедиться, что они используют соответствующие библиотеки / версии, вам потребуется написать плагин 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.");
          }
        });
      });
    });
  }
}

Дальнейшее чтение :

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...