我尝试像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();
}
}
我找不到错误。 我该如何解决这个问题?
这是pom.xml
答案 0 :(得分:0)
您需要在jar的mainfest中指定主类或指定要运行的类:
java -cp camel-blueprint-1.0.0-SNAPSHOT.jar com.mycompany.camel.blueprint.Main
答案 1 :(得分:0)
您创建的是可执行JAR文件,该文件依赖于其他(外部)JAR文件。这通常不是一个好主意。但是,如果要使其工作,则在创建JAR文件时,需要安排其清单中具有适当的ClassPath
属性。 JAR文件规范说明了这一点:
“Class-Path:此属性的值指定此应用程序或扩展所需的扩展或库的相对URL .URL由一个或多个空格分隔。应用程序或扩展类加载器使用该值此属性用于构建其内部搜索路径。“
但有一个问题。 URL相对于可执行JAR文件的位置进行解析。如果实际的外部JAR不在清单中指定的预期位置,那么主JAR将不会启动。