2012-11-14 55 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