尝试将JAR文件添加到项目中,但获取NoClassDefFoundError

时间:2013-04-12 12:34:08

标签: java jar runtime-error noclassdeffounderror

我从这个项目https://github.com/timmolter/XChange下载了jar文件,我现在正试图在Eclipse中运行一个示例程序。

在运行时没有指示错误,但在尝试运行它时,我收到以下错误消息。

Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
    at com.xeiam.xchange.ExchangeFactory.<init>(ExchangeFactory.java:41)
    at com.xeiam.xchange.ExchangeFactory.<clinit>(ExchangeFactory.java:39)
    at com.xeiam.xchange.rhbotha.bot.Main.main(Main.java:18)
Caused by: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    ... 3 more

这是我的代码。

package com.xeiam.xchange.rhbotha.bot;

import com.xeiam.xchange.Exchange;
import com.xeiam.xchange.ExchangeFactory;
import com.xeiam.xchange.currency.Currencies;
import com.xeiam.xchange.dto.marketdata.Ticker;
import com.xeiam.xchange.mtgox.v1.MtGoxExchange;
import com.xeiam.xchange.service.marketdata.polling.PollingMarketDataService;

public class Main {

    /**
     * @param args
     */
    public static void main(String[] args) {

        // Use the factory to get the version 1 MtGox exchange API using default settings
        Exchange mtGoxExchange = ExchangeFactory.INSTANCE.createExchange(MtGoxExchange.class.getName());

        // Interested in the public polling market data feed (no authentication)
        PollingMarketDataService marketDataService = mtGoxExchange.getPollingMarketDataService();

        // Get the latest ticker data showing BTC to USD
        Ticker ticker = marketDataService.getTicker(Currencies.BTC, Currencies.USD);
        System.out.println(ticker.toString());

        // Get the latest ticker data showing BTC to EUR
        ticker = marketDataService.getTicker(Currencies.BTC, Currencies.EUR);
        System.out.println(ticker.toString());

        // Get the latest ticker data showing BTC to GBP
        ticker = marketDataService.getTicker(Currencies.BTC, Currencies.GBP);
        System.out.println(ticker.toString());

    }

}

根据我的阅读,它可能是类路径中的问题,但不知道该怎么做。任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:1)

你错过了这个jar(可能是其他人):org.slf4j.LoggerFactory

我的建议是使用Maven来管理您的依赖项(通过pom),但如果不是只下载这个jar并将其包含在其他jar中(即在类路径上)

答案 1 :(得分:1)

缺少slf4j.jar。从这里下载并将其包含在classpath中。 http://www.slf4j.org/download.html

在Eclipse中的

转到Project Properties-&gt; Java Build Path-&gt; Libraries然后添加外部jar。

答案 2 :(得分:1)

您已下载了一个包含您在代码中使用的类的jar。您正在使用的类位于您已下载并在eclipse中放入类路径的jar中。在编译时,您的代码能够编译,因为您的代码所依赖的类已经编译并且可以在类路径中找到(在您添加的jar中),因此您不会遇到任何编译错误。

问题是您下载的jar取决于您在类路径中未提供的其他jar的其他类。当您尝试运行时,由于该类不存在,您将获得未找到类的异常。就像其他人说的那样我会建议使用maven,这样当你包含你需要的jar时,jar的所有依赖都会被拉入。您还可以将所有必需的jar放在类路径中,它可能会有点难以管理

答案 3 :(得分:0)

您的类路径中缺少SLF4J lib。下载slf4j jar并添加到类路径(在Eclipse中转到Project Properties-&gt; Java Build Path-&gt; Libraries,然后添加外部jar。