Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
“线程中的异常”;“主要”;java.lang.NoClassDefFoundError(Maven项目)_Java_Maven_Apache Camel_Maven 3 - Fatal编程技术网

“线程中的异常”;“主要”;java.lang.NoClassDefFoundError(Maven项目)

“线程中的异常”;“主要”;java.lang.NoClassDefFoundError(Maven项目),java,maven,apache-camel,maven-3,Java,Maven,Apache Camel,Maven 3,我尝试这样执行我的应用程序java-jar camel-blueprint-1.0.0-SNAPSHOT.jar ('camel-blueprint-1.0.0-SNAPSHOT.jar'是一个maven projet),我得到以下错误: Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/camel/main/Main at com.mycompany.camel.blueprint.MainExample

我尝试这样执行我的应用程序
java-jar camel-blueprint-1.0.0-SNAPSHOT.jar
('camel-blueprint-1.0.0-SNAPSHOT.jar'是一个maven projet),我得到以下错误:

Exception in thread "main" java.lang.NoClassDefFoundError:
org/apache/camel/main/Main
at com.mycompany.camel.blueprint.MainExample.boot(MainExample.java:19)
at com.mycompany.camel.blueprint.MainExample.main(MainExample.java:12)
Caused by: java.lang.ClassNotFoundException: org.apache.camel.main.Main
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 2 more
这是主要课程:

package com.mycompany.camel.blueprint;

import org.apache.camel.main.Main;
import org.apache.log4j.BasicConfigurator;

public class MainExample {
    private Main main;   

    public static void main(String[] arguments) throws Exception {
        MainExample example = new MainExample();
        example.boot();
        BasicConfigurator.configure();
    }

    public void boot() throws Exception { 
        // create a Main instance       
        main = new Main(); 
        main.enableHangupSupport();
        System.out.println("Starting Camel. Use ctrl + c to terminate the JVM.\n");      
        main.run(); 
    } 
}
我找不到错误。 我如何解决这个问题


这是您需要在jar的mainfest中指定main类或指定要运行的类的方法:

java -cp camel-blueprint-1.0.0-SNAPSHOT.jar com.mycompany.camel.blueprint.Main

您创建的是一个依赖于其他(外部)JAR文件的可执行JAR文件。这通常不是一个好主意。但是,如果您想让它工作,那么当您创建JAR文件时,您需要安排它在其清单中具有适当的
ClassPath
属性。JAR文件规范说明如下:

“类路径:此属性的值指定此应用程序或扩展需要的扩展或库的相对URL。URL由一个或多个空格分隔。应用程序或扩展类加载器使用此属性的值构造其内部搜索路径。”


但有一个陷阱。URL是相对于可执行JAR文件的位置解析的。如果实际的外部JAR不在清单中指定的预期位置,那么主JAR将不会启动。

您是如何创建JAR的?发布您的pom.xml如何生成
camel-blueprint-1.0.0-SNAPSHOT.jar
?我认为它不包括参考库。它应该是一个胖罐子(例如,按照:)。胖jar与普通jar的不同之处在于,引用的库也被添加到结果jar中。我编辑了我的问题,您不能指定类名,因为您使用了
-jar
选项。这是真的……他应该使用的类名-cpI也有同样的问题。
这是pom.xml:我尝试了这个,但我有相同的错误:org.apache.maven.plugins maven jar plugin 2.4 true src/main/java/com/mycompany/camel/blueprint com.mycompany.camel.blueprint.main示例您真的将外部jar文件放在src/main/java/com/mycompany/camel/blueprint文件夹中了吗在里面相对于JAR文件位置?“因为,我想这就是你告诉Maven放进舱单的!