2013-05-08 40 views
0

我通過ant構建我的代碼,之後我嘗試運行我的主類。如何通過ant爲java jar添加第三方庫到classpath中?

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 classpath中我發現罐子?

回答

0

我的問題解決了。清單文件更新內容如下:

Class-Path: lib/slf4j.jar lib/another.jar 

我的錯如下::

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 

如果多個罐子被添加到要 如果多個罐子想補充,應該如下進行./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>