Hei*_*ing 3 java ant build.xml
我正在使用ant来构建我的build.xml文件,它编译好了,但是java.lang.NoClassDefFoundError当通过" java -jar my_jar.jar" 运行生成的jar时获得运行时.这似乎出现了很多,但没有相关问题的解决方案对我有用.
我的classpath javac只包含" /usr/local/lib/libthrift.jar"而主.java文件导入了一堆诸如的thrift包org.apache.thrift.transport.TTransportException.
当我尝试通过以下方式运行程序时:
java -jar MyClass.jar
Run Code Online (Sandbox Code Playgroud)
,我收到错误:
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.
Run Code Online (Sandbox Code Playgroud)
以下是我到目前为止尝试过的不起作用的东西:
在命令行上添加一个标志,如"java ",结果与上面的错误相同-cp /usr/local/lib/libthrift.jar -jar my_jar.jar
加入<attribute name="Class-Path" value="./:/usr/local/lib/libthrift.jar"/>我的罐子的内部manifest>标签,结果是与上面相同的错误
添加-Xbootclasspath/a:/usr/local/lib/libthrift.jar:./到java命令行.它解决了第一个错误,但出现了不同的错误:
线程"main"中的异常java.lang.NoClassDefFoundError:org/apache/log4j/Logger atg.apache.thrift.transport.TServerSocket.<clinit>(TServerSocket.java:36)位于MyClass的MyClass.start(未知来源) .main(未知来源)
编辑:
如果我注释掉实例化缺少的类但保留导入的代码,代码执行正常.
编辑:
我将我的java类移动到服务器并使用manifest属性中的服务器引用MainClass,但这并没有修复任何问题.
Could not find the main class: MyClass
Run Code Online (Sandbox Code Playgroud)
该错误实际上与您的错误相关MANIFEST:
Class-Path:请参阅此HowTo有罐子时最好的解决方案是尝试将所需的罐子包含在清单声明中.
Manifest-Version: 1.0
Class-Path:
customer_client.jar
mailer_client.jar
signon_client.jar
Run Code Online (Sandbox Code Playgroud)
看这个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>
Run Code Online (Sandbox Code Playgroud)
将<attribute name="Main-Class" value="howto.Hello"/>需要指定的完整路径(包)MainClass,而不仅仅是MainClass.
如果您的主类在默认包(未命名的包)中,我不确定它是否可以被加载器引用(请参阅此SO问题)
所以将您移动JarRunner到包中,并在<attribute name="Main-Class" value="myPackage.JarRunner"/>元素中正确声明它 .