项目在Eclipse中运行,但不是从命令行运行:java.lang.NoClassDefFoundError与Maven和Dom4J

项目在Eclipse中运行,但不是从命令行运行:java.lang.NoClassDefFoundError与Maven和Dom4J

问题描述:

我做了一个小样本项目来测试事情,并发现了一些我发现奇怪的东西。 我在Eclipse中创建了一个新的Maven项目,其中一些代码使用Dom4J在XML文件中四处探索。 它优良运行,只要我只能从withing Eclipse中启动应用程序,但是当我想启动Maven的包装我,我得到这个错误的jar:项目在Eclipse中运行,但不是从命令行运行:java.lang.NoClassDefFoundError与Maven和Dom4J

avalon% java -jar target/avalon.launcher-0.0.1-SNAPSHOT.jar 
Exception in thread "main" java.lang.NoClassDefFoundError: org/dom4j/DocumentException 
    at java.lang.Class.getDeclaredMethods0(Native Method) 
    at java.lang.Class.privateGetDeclaredMethods(Class.java:2688) 
    at java.lang.Class.privateGetMethodRecursive(Class.java:3035) 
    at java.lang.Class.getMethod0(Class.java:3005) 
    at java.lang.Class.getMethod(Class.java:1771) 
    at sun.launcher.LauncherHelper.validateMainClass(LauncherHelper.java:544) 
    at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:526) 
Caused by: java.lang.ClassNotFoundException: org.dom4j.DocumentException 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:372) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:360) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    ... 7 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>de.oliverconzen</groupId> 
    <artifactId>avalon.launcher</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>jar</packaging> 

    <name>avalon</name> 
    <description>Simple cli based game written in Java</description> 
    <url>http://maven.apache.org</url> 

    <properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    </properties> 

    <dependencies> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>4.11</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>dom4j</groupId> 
     <artifactId>dom4j</artifactId> 
     <version>1.6.1</version> 
     <scope>runtime</scope> 
    </dependency> 
    <dependency> 
     <groupId>jaxen</groupId> 
     <artifactId>jaxen</artifactId> 
     <version>1.1.1</version> 
    </dependency> 
    </dependencies> 
    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-compiler-plugin</artifactId> 
     <version>3.1</version> 
     <configuration> 
      <source>1.8</source> 
      <target>1.8</target> 
     </configuration> 
     </plugin> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-jar-plugin</artifactId> 
     <version>2.4</version> 
     <configuration> 
      <archive> 
      <manifest> 
       <mainClass>de.oliverconzen.avalon.launcher.App</mainClass> 
      </manifest> 
      </archive> 
     </configuration> 
     </plugin> 
    </plugins> 
    </build> 
</project> 

非常感谢!

当然,在我发表这篇文章后,我找到了答案。依赖关系不会捆绑执行。如果它们没有捆绑在一起,那么依赖关系的罐子必须位于同一个文件夹(?)中。

无论如何,这帮助我:

How can I create an executable JAR with dependencies using Maven?