2012-07-11 169 views
0

我想從maven java項目創建一個jar文件,並將其作爲外部jar文件添加到另一個項目中。但是我不斷收到NoClassDefFoundError錯誤。Eclipse將引用的jar添加到導出的jar文件中的問題

Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory 
    at com.tutelatechnologies.dashboard.DataUsageLogs.Logging.getlogger(Logging.java:10) 
    at com.tutelatechnologies.dashboard.DataUsageLogs.Logging.d(Logging.java:26) 
    at com.tutelatechnologies.dashboard.DataUsageLogsRunner.DUL_TESTER.main(DUL_TESTER.java:11) 
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) 
    ... 3 more 

該jar文件非常簡單。它僅包含用Log4J和SLF4J記錄的封裝器。我已經包括它打擊:

import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 

public class Logging { 

    public void e(String msg, Class inputClass) 
    { 
     Logger logs = LoggerFactory.getLogger(inputClass); 
     logs.error(msg); 
    } 
    public void w(String msg, Class inputClass) 
    { 
     Logger logs = LoggerFactory.getLogger(inputClass); 
     logs.warn(msg); 
    } 
    public void d(String msg, Class inputClass) 
    { 
     Logger logs = LoggerFactory.getLogger(inputClass); 
     logs.debug(msg); 
    } 
    public void t(String msg, Class inputClass) 
    { 
     Logger logs = LoggerFactory.getLogger(inputClass); 
     logs.trace(msg); 
    }  
} 

現在我右鍵單擊此項目,選擇導出 - > Java - > Jar文件,然後單擊完成。留下所有選定的文件夾。

然後我去我的新項目,並通過右鍵單擊我的項目添加jar文件,選擇生成路徑 - >配置生成路徑。然後在Libraries選項卡中,單擊「Add external jars」按鈕並將其鏈接到我的jar文件。我附上我的源代碼和一個javadoc,以便我可以驗證它的鏈接是否正確。它看起來沒問題,但是當我運行它時,我得到了NoClassDefFoundError。這是因爲eclipse並沒有將相關性添加到jar文件中。

如果我將項目添加到Java Build路徑,我可以得到這個工作。但我希望這是一個自包含的jar文件。它碰到LoggerFactory.getLogger(inputClass)時崩潰了;它正在尋找slf4j依賴。

以下行是用於測試的唯一行。

Logging.d("test", thisClass.class); 

是否有可能將所有依賴關係打包到一個jar文件中並讓它正確鏈接?

僅供參考,我已經嘗試將此作爲一個Runnable Jar,該接口可以工作,但該jar文件不知道如何鏈接到log4j.properties文件。該文件位於src/main/resources中。

任何幫助表示讚賞。

乾杯,

回答

0

我不確定問題到底是什麼,但我能夠得到它的工作。我導出了文件,但只選擇了相關的源文件和屬性文件。然後我將它添加到我的其他項目「訂單和導出」選項卡列表的頂部。

最終,我將jar添加爲maven依賴項,然後將jar的所有必需依賴項添加到新項目中,並且工作正常。

乾杯。

0

它看起來像缺少的jar是SLF4J本身,而不是你的代碼。根據你的文件夾結構,它看起來像你使用Maven。是否有可能將slf4j-api.jar標記爲Test依賴項?您實際上需要需要需要對其進行編譯(即將其標記爲編譯依賴項),但不同的插件可以是測試依賴項,例如logback-classic或您正在使用的任何其他插件。

相關問題