从导入的依赖项覆盖 Gradle 项目配置
Override Gradle project configuration from imported dependency
我正在开发一个项目,作为许多其他项目的平台。它作为图书馆分发。
我面临以下问题:我无法控制其他项目,并且我希望使用一致的日志记录格式。为了做到这一点,我想要在我的项目的 build.gradle 中声明特定的日志依赖版本,以便我可以操作它们。
我应该如何编写我的 Gradle 配置,以便它可以覆盖或强制特定的依赖版本?我正在使用 Gradle 6.2.1 并且我已经尝试过
api(group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.13.0') {
force = true
}
但是没用。
库无法dictate/override消费项目的依赖项。
如果您想控制其他项目并确保它们使用适当的 libraries/versions,那么您将需要编写一个 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.");
}
});
});
});
}
}
进一步阅读:
我正在开发一个项目,作为许多其他项目的平台。它作为图书馆分发。
我面临以下问题:我无法控制其他项目,并且我希望使用一致的日志记录格式。为了做到这一点,我想要在我的项目的 build.gradle 中声明特定的日志依赖版本,以便我可以操作它们。
我应该如何编写我的 Gradle 配置,以便它可以覆盖或强制特定的依赖版本?我正在使用 Gradle 6.2.1 并且我已经尝试过
api(group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.13.0') {
force = true
}
但是没用。
库无法dictate/override消费项目的依赖项。
如果您想控制其他项目并确保它们使用适当的 libraries/versions,那么您将需要编写一个 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.");
}
});
});
});
}
}
进一步阅读: