我从eclipse创建了maven jar文件。运行jar时出现以下错误。
错误:
A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/fs/FSDataOutputStream
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Unknown Source)
at java.lang.Class.privateGetMethodRecursive(Unknown Source)
请指导是否需要在pom.xml中添加任何依赖项
pom.xml文件
<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>utd.bigdata</groupId>
<artifactId>hadoop1</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>hw1</name>
<dependencies>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>2.4.1</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>2.7.3</version>
<scope>compile</scope>
</dependency>
<!-- <dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-auth</artifactId>
<version>2.4.1</version>
</dependency>-->
</dependencies>
<build>
<plugins>
<plugin>
<!-- Build an executable JAR -->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<manifest>
<mainClass>bigdata.UploadHadoop</mainClass>
<classpathPrefix>classes/lib</classpathPrefix>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
</project>
另外pom.xml中是否有任何错误?请建议任何代码更改
3条答案
按热度按时间jslywgbw1#
作为“fatjar”的替代品,hadoopjarrunner还支持“jarofjars”格式。值得注意的是,它不是jar的标准,但由于hadoop支持它,这里是:如何将所有必需的jar文件放在maven的最终jar文件中的库文件夹中?
这种格式是一个普通的jar,但是有一个包含所有依赖jar的lib/文件夹。
uqcuzwp82#
常规.jar存档在运行时不包含其依赖项,为此,您可以使用maven程序集插件创建fat可执行jar:
https://maven.apache.org/plugins/maven-assembly-plugin/usage.html
s4n0splo3#
如果您使用maven jar插件构建可执行jar,请阅读文档。http://maven.apache.org/shared/maven-archiver/examples/classpath.html#make
首先,在pom.xml中添加maven jar插件
其次,它不会将依赖项jar附加到项目jar。因此,您必须确保依赖jar(hadoop客户机,hadoop公共)是自己在classes/lib中的。
最后,我建议您使用maven shade插件构建一个可执行jar(fat jar)http://maven.apache.org/plugins/maven-shade-plugin/examples/executable-jar.html 它将依赖jar自身附加到结果shade jar。您还可以使用maven程序集插件来构建可执行jar,但不推荐这样做。