0

我通过 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

如何通过 ant 为我的 jar 添加在类路径中找不到的库?

4

1 回答 1

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

我的错如下:./libor ./lib/*or lib/*.jar。据我了解,所有罐子都必须写在清单文件中。

蚂蚁脚本写了类似的东西:

<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>
于 2013-05-09T10:25:03.197 回答