我没有在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 repo之前,为了做到这一点,让我把它从我们不想这样做的方式中解脱出来。我们将它们置于本地是有原因的......因此我们可以快速进行更改并查看所述更改。我们宁愿忍受恼人的警告信息,也不愿增加每次更改部署的痛苦。
答案 0 :(得分:0)
您获得的警告与类路径中存在多个版本的slf4j-api无关。 SLF4J API旨在一次只与一个基础日志框架绑定。如果类路径上存在多个绑定,SLF4J将发出警告,列出这些绑定的位置。您可以在SLF4J warning or error messages and their meanings文档中阅读更多相关信息。 Slf4J提出的解决方案是:当类路径上有多个绑定时,选择一个且只能使用一个绑定,并删除其他绑定。 在您的情况下,最好的方法是直接从插件中排除Slf4J绑定。插件不应该依赖于拥有自己的绑定,而是假设Grails应用程序将提供绑定(这将是它将要做的)