【问题标题】:Exclude dependencies from a local Grails plugin从本地 Grails 插件中排除依赖项
【发布时间】:2012-11-03 04:49:47
【问题描述】:

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

我们在 grails 项目中使用了几个本地插件。我们的一个插件最近依赖于 SLF4J。我们的主 webapp(使用插件)也依赖于 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 存储库以执行此操作之前,让我把它排除在我们不想这样做的方式之外。我们将它们放在本地是有原因的……所以我们可以快速进行更改并查看所述更改。我们宁愿忍受烦人的警告消息,也不愿增加部署每次更改的痛苦。

【问题讨论】:

    标签: grails plugins dependencies


    【解决方案1】:

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

    【讨论】:

    • 我明白这一点,但这只是更加强调了我的问题。就目前而言,我看不到一种修改本地插件依赖项的方法,类似于您修改任何其他插件的方式。我最终完全按照你的描述做了,因为这是我能找到的唯一方法,但理想情况下,你应该能够像任何其他依赖项/插件一样定义排除项。你是对的,Grails 已经提供了绑定,所以我们可以进行更改,但对于其他依赖项,这可能不是那么干净。
    猜你喜欢
    • 2015-09-29
    • 2016-06-11
    • 2014-04-25
    • 1970-01-01
    • 2013-09-26
    • 2012-03-06
    • 2021-07-12
    • 2023-03-04
    • 2013-04-22
    相关资源
    最近更新 更多