我第一次使用 Maven 时遇到了依赖问题。
我用 Eclipse 创建了一个 Maven 项目并添加了依赖项,它运行没有问题。
但是当我尝试通过命令行运行它时:
$ mvn package # successfully completes
$ java -cp target/bil138_4-0.0.1-SNAPSHOT.jar tr.edu.hacettepe.cs.b21127113.bil138_4.App # NoClassDefFoundError for dependencies
它下载依赖项,成功构建,但是当我尝试运行它时,我得到 NoClassDefFoundError:
Exception in thread "main" java.lang.NoClassDefFoundError: org/codehaus/jackson/JsonParseException
at tr.edu.hacettepe.cs.b21127113.bil138_4.db.DatabaseManager.<init>(DatabaseManager.java:16)
at tr.edu.hacettepe.cs.b21127113.bil138_4.db.DatabaseManager.<init>(DatabaseManager.java:22)
at tr.edu.hacettepe.cs.b21127113.bil138_4.App.main(App.java:10)
Caused by: java.lang.ClassNotFoundException: org.codehaus.jackson.JsonParseException
at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
... 3 more
我的 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>tr.edu.hacettepe.cs.b21127113</groupId>
<artifactId>bil138_4</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>bil138_4</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-core-asl</artifactId>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-core-asl</artifactId>
<version>1.9.6</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.6</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
谁能帮我?
原文由 utdemir 发布,翻译遵循 CC BY-SA 4.0 许可协议
怎么运行?您可能试图在没有正确导入 Maven 类路径的情况下使用 eclipse 运行它。请参阅用于将 maven 与 eclipse 集成的 m2eclipse 插件。
要验证您的 Maven 配置是否正确,您可以使用 exec 插件 运行您的应用程序:
更新: 首先,关于运行时的错误
exec:java
,你的主类是tr.edu.hacettepe.cs.b21127113.bil138_4.App
。在谈论类名时,它们(几乎)总是以点分隔。简单的类名只是最后一部分:App
在你的例子中。完全限定名称是完整的包加上简单的类名,当你想运行某些东西时,它就是你给 maven 或 java 的名称。您尝试使用的是源文件的文件系统路径。那是完全不同的野兽。与文件系统中的源文件相比,类名通常直接转换为在类路径中找到的类文件。在您的特定情况下,有问题的类文件可能位于target/classes/tr/edu/hacettepe/cs/b21127113/bil138_4/App.class
因为 Maven 编译为target/classes
,而 java 传统上为每个级别的包装创建一个目录。您最初的问题只是您没有将 Jackson 罐子放在您的课程路径上。当你从命令行运行一个 java 程序时,你必须设置类路径让它知道它可以从哪里加载类。您已经添加了自己的 jar,但没有添加其他必需的。您的评论让我觉得您不了解如何手动构建类路径。简而言之,类路径可以有两个东西:包含类文件的目录和包含类文件的 jar。包含 jars 的目录将不起作用。有关构建类路径的更多详细信息,请参阅“ 设置类路径”以及 java 和 javac 工具文档。
您的类路径至少需要是,并且没有换行符:
请注意,Windows 上的分隔符是分号 (;)。
我很抱歉没有早点注意到它。问题出在您的原始帖子中,但我错过了。