2014-09-11 65 views
0

我是Maven和Java的新手。我在Eclipse中創建了一個簡單的map-reduce程序,並使用maven來指定依賴關係。 (我在POM.XML中指定了hadoop依賴項)。它下載了所有的依賴關係,我可以在maven dependecies中看到它們。然後我創建了一個JAR並在集羣中運行它。一切工作正常。但是當我解壓縮JAR文件時,我在JAR中看不到Hadoop中的任何依賴jar包?然後我很困惑它是如何工作的?根據我的理解,您需要分發所有JARS。請教我。Map Reduce - Maven(它是如何工作的?)

感謝, 約翰

+0

其實這要看情況。如果你打算髮佈一個JAR,那麼,是的,你需要一個jar-with-dependencies。如果你可以分配一個_maven artifact_,那麼這個artifact的依賴關係就會被maven自動處理。 – user3159253 2014-09-11 04:20:47

回答

0

要建立一個罐子依賴在內,您必須配置maven-assembly-plugin。看看這個:

<plugins> 
    <plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <executions> 
     <execution> 
     <goals> 
      <goal>attached</goal> 
     </goals> 
     <phase>package</phase> 
     <configuration> 
      <descriptorRefs> 
      <descriptorRef>jar-with-dependencies</descriptorRef> 
      </descriptorRefs> 
      <archive> 
      <manifest> 
       <mainClass>com.example.package.MainClass</mainClass> 
      </manifest> 
      <manifestEntries> 
       <Source-Version>${build-version}</Source-Version> 
      </manifestEntries> 
      </archive> 
     </configuration> 
     </execution> 
    </executions> 
    </plugin> 
</plugins> 
0

Hadoop使用HADOOP_CLASSPATH中指定的位置運行作業時加載jar文件。

它位於文件的conf/hadoop_env.sh文件:

# Extra Java CLASSPATH elements. Optional. 
# export HADOOP_CLASSPATH="<extra_entries>:$HADOOP_CLASSPATH" 
+0

正如我在我的問題中所述,我創建的JAR沒有任何依賴關係,但仍然運行良好。這就是爲什麼我感到困惑? – DevMonk 2014-09-11 04:32:19