2011-12-03 167 views
4

我對maven非常陌生。我對依賴特性有點困惑。我知道我可以像這樣在pom文件中添加依賴關係Maven中的依賴

<dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>slf4j-api</artifactId> 
    <version>1.6.1</version> 
</dependency> 

這實際上是什麼意思?這是否意味着我不需要將slf4j jar文件導入到我的項目中?如果是這樣,我的項目如何訪問這些庫?

我已經從maven site讀了依賴關係,但沒有幫助我很多。

有人可以用更簡單的方式解釋它。

感謝

回答

5

一言以蔽之:這意味着你的項目對SLF4J的依賴,版本1.6.1。

此外:

  • 如果你用Maven構建你的項目(或您的IDE是Maven的感知),你不必做任何事情,才能使用SLF4J。 (除了正常的源代碼的考慮,像一個合理的import聲明等)
  • SLF4J訴1.6.1將默認的Maven倉庫中檢索到你的本地庫,這意味着...
  • ... ~/.m2/repository是您的存儲庫。 slf4j將被放入$M2_HOME/org/slf4j/$(artifactId}/1.6.1中,並且將包括(通常)一個jar文件,一個pom文件和一個散列文件。
  • Slf4j的依賴關係也將被下載到您的本地存儲庫中。
  • 那些的依賴關係將被下載ad infinitum/ad nauseum。 (如果存在很多依賴關係,「首次使用圖書館下載互聯網」的來源是笑話;而不是slf4j的情況。)這是「傳遞性依賴管理」 - Maven的原始目的之一。
1

目前在互聯網上的各種服務器的主機工件(罐),您可以下載作爲Maven構建的一部分。您可以添加像上面顯示的依賴關係來描述構建代碼所需的jar。當Maven去打造,它將與這些服務器中的一個和JAR下載到您的計算機,並放置在一個本地倉庫通常

${user_home}/.m2/repository 

Maven在接觸必須在Maven項目的pom文件中配置的服務器,在像

<repositories> 
    <repository> 
    </repository> 
</repositories> 

一節中的原型服務器可以在repo1.maven.org

關於Maven的好處是,如果需要一個罐子,你列表,它會拉動不僅如此罐子,但任何廣口瓶可以看出,那個罐子需要。很明顯,因爲你將罐子拉到你的機器上,所以只有在你的機器上找不到它們時纔會下載它們,因此不會每次(只是第一次)減慢你的構建。

1

編譯項目時,Maven會從存儲庫(通常是中央存儲庫)下載相應的.jar文件(您可以配置不同的存儲庫,用於鏡像或​​用於您自己的庫,這些庫不可用於中央存儲庫) 。

如果您的IDE瞭解Maven,它將解析pom並自行下載依賴關係或要求Maven這樣做。然後它會打開依賴關係的jar包,這就是你如何獲得自動完成:IDE在幕後爲你「導入」你的jar。

存儲庫不僅包含依賴關係的「.jar」文件,還包含描述其依賴關係的「.pom」文件。所以,maven會遞歸地下載它的依賴關係,並且你將得到編譯你的軟件所需的所有jar。然後,當你嘗試運行你的軟件時,你將不得不告訴JVM在哪裏找到這些依賴關係(即,你必須把它們放在類路徑中)。

我通常所做的就是將依賴關係複製到target/lib/目錄,因此部署軟件和啓動它很容易。要做到這一點,你可以使用maven-dependency-plugin,您在<build>註明:

<build> 
    <plugin> 
    <artifactId>maven-dependency-plugin</artifactId> 
    <version>2.1</version> 
    <executions> 
     <execution> 
     <phase>package</phase> 
     <goals> 
      <goal>copy-dependencies</goal> 
     </goals> 
     <configuration> 
      <outputDirectory>${project.build.directory}/lib</outputDirectory> 
     </configuration> 
     </execution> 
    </executions> 
    </plugin> 
</build> 
2

如果您不使用maven,那麼您需要手動下載並使用您項目所需的依賴關係。你可能會把它們放在一個lib文件夾中,並在IDE中指定這個位置以及你的構建工具。

maven爲您管理這些依賴關係。您可以使用指定的格式指定項目所需的依賴項,並且Maven會從互聯網爲您下載並管理它們。在構建項目時,maven知道它放置這些依賴項的地方並使用它們。當大多數IDE發現它是一個Maven項目時,它們也知道這些依賴項在哪裏。

爲什麼這是一件大事?通常,大多數開源庫會定期發佈更新的版本。如果您的項目使用這些,那麼每次需要更新的版本時,您都需要手動下載並管理它。更重要的是,每個依賴關係可能會有其他依賴關係(稱爲傳遞依賴關係)。如果你不使用maven,你也需要識別,下載和管理這些傳遞依賴。

您的項目使用的依賴性越多,它就越複雜。有可能兩個依賴關係最終會使用它們通用的不同版本的依賴關係。