跑mapreduce实验的时候发现,总是报错CLASSNOTFOUND,找不到一个第三方jar包的类,即使在hadoop-env.sh添加HADOOP_CLASS时,还是会同样的错误。于是想到将依赖的包和自己的class文件打成一个包,避免找不到类(前提是maven中已经添加了依赖)。
在pom.xml中添加
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<!--这里要替换成jar包main方法所在类 -->
<mainClass>InvertedIndex2</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id> <!-- this is used for inheritance merges -->
<phase>package</phase> <!-- 指定在打包节点执行jar包合并操作 -->
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
运行mvn package后发现target目录下存在两个文件,其中 *-with-dependencies.jar包含依赖的jar里面的文件和自己的class文件。