我通过ant构建我的代码,后来我尝试运行我的主类。
java -cp my.jar mypackage.MyClass
但我对以下内容有类似的例外:
Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
at org.apache.nutch.crawl.CrawlerService.<clinit>(CrawlerService.java:31)
Caused by: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
... 1 more
我的主要课程:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class MyClass{
private static final Logger LOG = LoggerFactory.getLogger(MyClass.class);
public static void main(String[] args) throws Exception {
System.out.println("TEST");
}
}
如果我不使用import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
,则没问题。但如果我使用,则显示例外。
这是一个例子。如果我导入其他库,则显示NoClassDefFoundError
例外。
我的MANIFEST.MF文件:
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.8.4
Created-By: 1.7.0_17-b02 (Oracle Corporation)
Main-Class: mypackage.MyClass
Class-Path: ./lib
如何添加库在类路径中找不到通过我的jar的蚂蚁?
答案 0 :(得分:0)
我的问题解决了。清单文件更新如下:
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.8.4
Created-By: 1.7.0_17-b02 (Oracle Corporation)
Main-Class: mypackage.MyClass
Class-Path: lib/slf4j.jar
如果要添加多个jar 如果想要添加多个jar,应按如下方式进行:
Class-Path: lib/slf4j.jar lib/another.jar
我的错误如下:./lib
或./lib/*
或lib/*.jar
。
据我了解,所有罐子必须写在清单文件中。
Ant脚本写的类似于:
<target name="create_run_jar">
<jar destfile="/home/test/Desktop/my.jar">
<manifest>
<attribute name="Main-Class" value="mypackage.MyClass"/>
<attribute name="Class-Path" value="lib/slf4j.jar"/>
<attribute name="Class-Path" value="lib/another.jar"/>
</manifest>
<fileset dir="/home/test/workspace/FileMonitor/bin"/>
</jar>
</target>