删除传递类路径依赖 - 插件块

Remove transitive classpath dependency - plugins block

我想从 shadow gradle 插件中删除 log4j 传递依赖。

plugins {
  id 'com.github.johnrengelman.shadow' version '7.1.2'
}

我搜索了解决方案,但没有得到任何解决方案。我知道我可以使用以下代码删除它 -

buildscript {
  repositories {
    gradlePluginPortal()
  }
  dependencies {
    classpath 'gradle.plugin.com.github.jengelman.gradle.plugins:shadow:7.1.2', {
      exclude module: 'log4j'
    }
  }
}

但是有没有办法用插件块来做到这一点?

不,plugins { } 本身就是一个受设计限制的 DSL。这记录在文档中:

https://docs.gradle.org/current/userguide/plugins.html#sec:constrained_syntax

The plugins {} block does not support arbitrary code. It is constrained, in order to be idempotent (produce the same result every time) and side effect free (safe for Gradle to execute at any time).

它被设计成只做一件事:应用插件。

我使用下面的代码来排除依赖 -

buildscript {
  repositories {
    ..
  }
  dependencies {
    ..
  }
  configurations.classpath {
    exclude module: 'log4j'
  }
}

plugins {
  id 'com.github.johnrengelman.shadow' version '7.1.2'
}