2012-11-14 15 views
4

,我没有看到任何关于googlytubes类似的答案,这所以这里去...排除依赖从本地Grails的插件

我们利用我们的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回购站之前,让我把它从我们不想做的事情中排除出去。我们有他们当地的原因......所以我们可以迅速做出改变,并看到所述的变化。我们宁愿忍受恼人的警告信息,也不愿在每次更改中增加部署的痛苦。

回答

0

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

+0

我明白,但这只是更强调我的问题。就目前而言,我没有看到一种方法来修改本地插件的依赖关系,类似于其他插件。我最终完全按照您所描述的方式进行,因为这是我能找到的唯一途径,但理想情况下,您应该能够像任何其他依赖项/插件一样定义排除项。你是对的,Grails已经提供了绑定,所以我们可以做出改变,但对于其他依赖关系,这可能不是那么干净。 – James