我得到IncompatibleClassChangeError :: Found接口org.apache.hadoop.mapreduce.TaskAttemptContext,但是类是预期的。我使用了着色插件和Main类插件,即
Mainclass plugin:
==================
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>com.calsoftlabs.ndt.PcapMain</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
shaded plugin:
============
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>1.7.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<artifactSet>
signed jars
<excludes>
<exclude>bouncycastle:bcprov-jdk15</exclude>
</excludes>
</artifactSet>
<transformers>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
Main class
<mainClass>com.calsoftlabs.ndt.PcapMain</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
我有两个罐子: 1)original-PCAPSample-0.0.1-SNAPSHOT.jar - &gt;由于带阴影的插件 2)PCAPSample-0.0.1-SNAPSHOT.jar - &gt;由于Main类插件
---&gt;当我使用着色的插件jar时,我在线程“main”中遇到异常java.lang.ClassNotFoundException:pcap
---&GT;当我使用第二个jar时,我得到了IncompatibleClassChangeError
---&gt;实际上我正在尝试使用此网址https://github.com/RIPE-NCC/hadoop-pcap/blob/master/hadoop-pcap-lib/src/main/java/net/ripe/hadoop/pcap/io/PcapInputFormat.java
中的pcapInputFormat类---&GT;我在我的pom.xml中添加了hadoop-pcap-lib(来自上面指定的url)依赖项并尝试使用该PcapInputFormat
---&gt;我现在可以做些什么来克服这个问题。任何人都可以就此问题提出建议......
答案 0 :(得分:0)
TaskAttemptContext
已从Hadoop 1中的类更改为Hadoop 2中的接口。很明显,您使用的jar是针对Hadoop 1 API构建的,尽管他们声称相反,但Hadoop 2除了最简单的应用程序之外,它不向后兼容。