外部库的java.lang.NoClassDefFoundError

时间:2018-03-09 09:35:02

标签: java maven

我有一个简单的程序将csv文件解析为json对象。 我将json.simple-1.1添加到了我的maven中。我的maven的内容是这样的:

    <groupId>IoT</groupId>
    <artifactId>ETL2</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
    <dependency>
        <groupId>com.googlecode.json-simple</groupId>
        <artifactId>json-simple</artifactId>
        <version>1.1</version>
    </dependency>
    </dependencies>



    <build>
        <plugins>
            <plugin>
                <!-- Build an executable JAR -->
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.0.2</version>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <classpathPrefix>lib/</classpathPrefix>
                            <mainClass>ETL2</mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
        </plugins>
    </build> 

我尝试在终端中执行jar工件。 我收到这些错误。

  

错误:发生了JNI错误,请检查您的安装和   再次尝试线程“main”中的异常java.lang.NoClassDefFoundError:   中的org / json / simple / parser / ParseException   java.lang.Class.getDeclaredMethods0(Native Method)at   java.lang.Class.privateGetDeclaredMethods(Class.java:2701)at at   java.lang.Class.privateGetMethodRecursive(Class.java:3048)at   java.lang.Class.getMethod0(Class.java:3018)at   java.lang.Class.getMethod(Class.java:1784)at   sun.launcher.LauncherHelper.validateMainClass(LauncherHelper.java:544)     在   sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:526)   的&GT;引起:java.lang.ClassNotFoundException:   的org.json.simple.parser.ParseException   java.net.URLClassLoader.findClass(URLClassLoader.java:381)at   java.lang.ClassLoader.loadClass(ClassLoader.java:424)at   sun.misc.Launcher $ AppClassLoader.loadClass(Launcher.java:335)at at   java.lang.ClassLoader.loadClass(ClassLoader.java:357)... 7更多

我在这里读到了

  

这是因为您的代码所依赖的类文件   它出现在编译时但在运行时找不到。寻找   构建时和运行时类路径的差异。

这就是为什么我怀疑我的maven配置可能不正确。

1 个答案:

答案 0 :(得分:2)

将您的插件更改为以下代码段,强烈建议您阅读How to build an executable jar with dependencies

<build>
    <plugins>
        <plugin>
            <!-- Build an executable JAR -->
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>3.0.2</version>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                        <classpathPrefix>lib/</classpathPrefix>
                        <mainClass>ETL2</mainClass>
                    </manifest>
                </archive>
                <descriptorRefs>
                  <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
            </configuration>
        </plugin>
    </plugins>
</build>