运行java -jar时的java.lang.ClassNotFoundException
我正在使用ant来构建我的build.xml文件,它编译好了,但是当通过“
java -jar my_jar.jar”运行生成的jar时获得运行时java.lang.NoClassDefFoundError.这似乎出现了很多,但没有相关问题的解决方案对我有用.
我的javac类路径只包含“/usr/local/lib/libthrift.jar”,主.java文件导入了一堆thrift包,如org.apache.thrift.transport.TTransportException. 当我尝试通过以下方式运行程序时: java -jar MyClass.jar ,我收到错误: Exception in thread "main" **java.lang.NoClassDefFoundError**: org/apache/thrift/transport/TTransportException Caused by: java.lang.ClassNotFoundException: org.apache.thrift.transport.TTransportException at java.net.URLClassLoader$1.run(URLClassLoader.java:200) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:188) at java.lang.ClassLoader.loadClass(ClassLoader.java:307) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) at java.lang.ClassLoader.loadClass(ClassLoader.java:252) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320) Could not find the main class: **MyClass**. Program will exit. 这是迄今为止我尝试过的不起作用的东西: >在命令行上添加一个标志,如“java -cp /usr/local/lib/libthrift.jar -jar my_jar.jar”,结果与上面的错误相同 线程“main”中的异常java.lang.NoClassDefFoundError:org / apache / log4j / Logger 编辑: 如果我注释掉实例化缺少的类但保留导入的代码,代码执行正常. 编辑: 我将我的java类移动到服务器并使用manifest属性中的服务器引用MainClass,但这并没有修复任何问题. 解决方法Could not find the main class: MyClass 该错误似乎与您的MANIFEST有关: >可能没有完整的类路径Class-Path:请参阅this HowTo
Manifest-Version: 1.0 Class-Path: customer_client.jar mailer_client.jar signon_client.jar >或者可能没有在’my_jar.jar’中充分定义MainClass. 见this HowTo: <target name="jar" depends="compile"> <delete file="hello.jar"/> <delete file="MANIFEST.MF"/> <manifest file="MANIFEST.MF"> <attribute name="Built-By" value="${user.name}"/> <attribute name="Main-Class" value="howto.Hello"/> </manifest> <jar destfile="hello.jar" basedir="." includes="**/*.class" manifest="MANIFEST.MF" /> </target> < attribute name =“Main-Class”value =“howto.Hello”/>需要指定MainClass的完整路径(包),而不仅仅是MainClass. 如果你的主类在默认包(unnamed package)中,我不确定加载器是否可以引用它(参见SO question)因此,将您的JarRunner移动到一个包中,并在< attribute name =“Main-Class”value =“myPackage.JarRunner”/>中正确声明它.元件. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |