2011-05-02 84 views
27

Maven有時候有點過頭了......我創建了一個對slf4j和log4j具有可選依賴項的庫。通過可選的,我的意思是:Maven提供的「提供」範圍內的「可選」依賴項

  • 我的圖書館需要在編譯時這些日誌框架
  • 我的圖書館並不需要它們在運行時,但如果「發現的」它們,就會使用它們

目前,我已經標誌着依賴爲「可選」和「規定」:

<dependency> 
    <groupId>log4j</groupId> 
    <artifactId>log4j</artifactId> 
    <version>1.2.16</version> 
    <type>jar</type> 
    <scope>provided</scope> 
    <optional>true</optional> 
</dependency> 

但我的一些用戶報告的問題,因爲他們不需要LOG4/SLF4J。我的依賴是否正確?不幸的是,我發現官方文檔太抽象了,無法理解這個問題。

回答

30

您是否檢查了this文檔。它描述你的用例非常好。將依賴項標記爲可選項不會將它們解析爲使用您的庫的應用程序中的傳遞依賴項(即使範圍爲compile)。

在差<scope>provided</scope>其用於將由運行時環境的<optional>true</optional>依賴性不一定意味着被需要(提供所需的依賴的想法是,一些依賴關係僅用於在某些特徵項目,如果不使用該功能將不需要。)。

如果使用您的庫的項目將使用可選依賴關係提供的任何功能性,那麼項目必須爲他們自己聲明這些依賴關係。

由於你的配置對我來說似乎是正確的,我不知道什麼問題發生的原因。也許你可選的依賴關係可以被你不期望的版本中的其他庫解決。這當然可能會導致問題。