“线程中的异常”;“主要”;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放进舱单的!