grails - 从本地 Grails 插件中排除依赖项

标签 grails plugins dependencies

我在 googlytubes 上没有看到任何类似的答案,所以这里是......

我们在 grails 项目中使用了几个本地插件。我们的一个插件最近依赖于 SLF4J。我们的主 Web 应用程序(使用该插件)也依赖于 SLF4J。这会导致运行时出现完全无害但令人恼火的警告:

Error SLF4J: Class path contains multiple SLF4J bindings.

通常我只是在插件 SLF4J 依赖项上定义一个“排除”,但由于这是一个本地插件,我看不到任何方法可以这样做。我尝试过...

grails.plugin.location.'localpluginname' = '../localplugindir'

grails.project.dependency.resolution = {
    plugins {
        runtime("com.ourcompany:localpluginname:1.0") {
            excludes('slf4j-api')
        }
    }
}

...但随后它尝试实际解析远程存储库上的所述插件,但失败了。我们也不想直接在插件中排除依赖项,因为该插件可能会在其他尚未提供依赖项的项目中使用。

在有人建议我们将本地插件部署到本地 Maven 存储库以执行此操作之前,让我先说明一下我们不想这样做。我们将它们放在本地是有原因的……因此我们可以快速做出更改并看到所说的更改。我们宁愿忍受烦人的警告消息,也不愿增加部署每次更改的痛苦。

最佳答案

您收到的警告与类路径中存在多个版本的 slf4j-api 无关。 SLF4J API 旨在一次与一个且仅一个底层日志记录框架绑定(bind)。如果类路径上存在多个绑定(bind),SLF4J 将发出警告,列出这些绑定(bind)的位置。您可以在SLF4J warning or error messages and their meanings中阅读更多相关信息。文档。 Slf4J提出的解决方案是:当类路径上有多个绑定(bind)可用时,选择一个且仅一个您要使用的绑定(bind),并删除其他绑定(bind)。 在您的情况下,最好的方法是直接从插件中排除 Slf4J 绑定(bind)。该插件不应依赖于拥有自己的绑定(bind),而应假设 Grails 应用程序将提供绑定(bind)(这就是它将执行的操作)

关于grails - 从本地 Grails 插件中排除依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13383094/

相关文章:

android - 混淆 AAR 及其依赖项

grails - 尝试在Grails中实现时间表

grails - 无法访问 Controller 中的隐藏字段或参数

php - PHP 应用程序可能存在循环依赖问题

java - 如何获取java编辑器源代码?

javascript - 如何在WordPress内容(single.php)中添加自动折叠/展开?

javascript - 更新依赖会破坏另一个正在使用它的依赖(传递)

grails - Grails映射对象

grails - grails用remoteFunction选择,是否可以更新g:textField?

plugins - 报告辅助功能插件结果