2012-07-11 133 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或您正在使用的任何其他插件。

相关问题