2015-07-11 45 views
1

最近我想嘗試Apache Crunch庫。爲此我學習了Maven。我是否正確理解Maven?

據我瞭解,爲了使用一個庫,只需要在項目的pom.xml文件中添加合適的<dependency>..</dependency>塊,然後構建項目。所有的依賴將由Maven遞歸下載。

我的問題很簡單:我的理解是否正確?因爲在這個例子中,我只是簡單地將crunch-core依賴關係粘貼到pom文件中,並且只下載了一些依賴關係(因此我在運行應用程序時獲得了ClassNotFoundExceptions,這是我想要避免的)。

我的問題與Crunch無關。我試圖驗證我是否理解如何使用Maven使用第三方庫是正確的。或者如果我錯過了一些東西。

編輯:我看到我的理解是正確的。關於我的具體問題,這是我pom

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>aviv</groupId> 
    <artifactId>crunch-try</artifactId> 
    <version>1.0-SNAPSHOT</version> 

    <dependencies> 
     <dependency> 
      <groupId>org.apache.crunch</groupId> 
      <artifactId>crunch-core</artifactId> 
      <version>0.12.0-hadoop2</version> 
     </dependency> 
    </dependencies> 

</project> 

任何猜測爲什麼應用程序失敗?我是否希望單獨下載其他依賴項?

+0

這是正確的。 – kevcodez

+0

你的理解是正確的。 – Bennyz

+0

那麼運行應用程序的原因可能會失敗? –

回答

1

幾個crunch-core的依賴項被標記爲「提供」。這意味着緊縮開發人員希望它只能在某人或某事將其添加到類路徑中的環境中使用。您需要在預期的環境中運行您的應用程序,或者手動將所有提供的依賴項添加到您的pom中。

在pom中提供依賴關係的唯一原因是Maven沒有(還)區分'構建該事物所需的pom的內容'和'允許其他事物的內容用它。' Maven不會下載這些內容,因爲原作者說'這個jar需要在hadoop裏面運行,而這些東西已經在hadoop的classpath中。

我在this convenient location閱讀。

+0

這些不是由Maven下載的?如果是這樣,他們爲什麼在POM中列出? –

+0

見編輯....... – bmargulies

+0

我明白了。我所做的只是粘貼你共享的整個POM,但刪除了'提供的'行。它不起作用,抱怨我沒有指定依賴關係的「版本」。有沒有辦法告訴Maven「剛剛獲得最新版本」? –