2014-09-11 66 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