我正在使用 ant 来构建我的build.xml
文件,它可以编译,但是java.lang.NoClassDefFoundError
在通过“”运行生成的 jar 时会获得运行时java -jar my_jar.jar
。这似乎出现了很多,但没有一个相关问题的解决方案对我有用。
我的类路径javac
只包含“ /usr/local/lib/libthrift.jar
”,并且主.java
文件导入了一堆旧包,例如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
<attribute name="Class-Path" value="./:/usr/local/lib/libthrift.jar"/>
在我的 jar 的标签内添加manifest>
,结果与上面的错误相同添加
-Xbootclasspath/a:/usr/local/lib/libthrift.jar:./
到java命令行。它解决了第一个错误,但出现了另一个错误:线程“main”中的异常 java.lang.NoClassDefFoundError: org.apache.thrift.transport.TServerSocket.<clinit>(TServerSocket.java:36) at MyClass.start(Unknown Source) at MyClass 的 org/apache/log4j/Logger .main(未知来源)
编辑:
如果我注释掉实例化缺失类但保留导入的代码,则代码执行良好。
编辑:
我将我的 java 类移动到服务器并在 manifest 属性中使用服务器引用 MainClass,但这并没有解决任何问题。