2012-08-01 67 views
1

我试图使用象夫和创建使用Lucene索引文本从以下向量这个:https://cwiki.apache.org/confluence/display/MAHOUT/Creating+Vectors+from+Text无法运行./bin/mahout由于java.lang.NoClassDefFoundError:组织/ SLF4J /的LoggerFactory错误

但当我从MAHOUT_HOME目录在Cygwin中运行命令./bin/mahout我得到这个错误:

java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory 
     at org.apache.mahout.driver.MahoutDriver.<clinit>(MahoutDriver.java:89) 
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 
Exception in thread "main" 

我知道,这是SLF4J的依赖问题,但我不知道我应该怎么解决呢。

我已经成功使用“mvn install”构建了mahout,所有测试都可以正常工作,并且没有错误,并且我为我的项目(创建lucene索引器)使用了Eclipse Indigo(Maven Built-in功能)。

任何想法?

回答

2

如果我已经正确理解您的问题,我表示歉意。

也许这个问题可以通过添加以下依赖于项目的,你正试图消耗亨利马乌pom.xml中得到解决:

<dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>slf4j-api</artifactId> 
    <version>1.6.6</version> 
</dependency> 

如果在sl4j的特定版本你需要通过this搜索来检查Maven中央存储库。

+0

不,它已经是项目的依赖项,就像你所期望的那样。否则整个项目不会编译开始。 – 2012-08-01 19:10:10

+0

你能否请转储mvn依赖项的输出:tree?另外,我想知道是否可以执行一个简单的测试:如果将sl4j.jar复制到JDK_HOME/jre/lib中会发生什么情况?我强烈怀疑它是这种依赖性。我对MAHOUT并不熟悉,但从我刚刚阅读的内容来看,此问题的根本原因始终是classpath中缺少的sl4j-api.jar。 – 2012-08-01 19:25:46

+0

此外,另一个建议:如果./bin/mahout是一个可编辑的脚本,当您在其中添加'echo $ CLASSPATH'时,会得到什么输出? 此外,在cygwin提示符下执行此操作时会发生什么:'export CLASSPATH =/cygdrive/c/path_to_sl4j-api.jar',然后执行./bin/mahout? – 2012-08-01 19:27:46

2

您正在运行一些Mahout类,而Mahout依赖于类路径中的第三方类。这里是slf4j日志外观。您可以将此项目的JAR添加到您的类路径中。或者你可以确保你运行的脚本为你设置。或者,您可以使用Mahout使用Maven构建的“.job”文件,该文件将打包所有依赖关系的JAR文件。

+0

我想我可能会把你和“项目”混为一谈。我想要做的是我在Eclipse中有一个项目,我使用lucene从我的文档创建索引。现在我已将索引保存在单独的目录中,我想从此索引创建术语向量。所以我想用cygwin来运行./bin/mahout命令。你能否更具体地说明你正在谈论哪个classpath以及如何使用.job文件?非常感谢你... – zghaf 2012-08-01 20:39:15

0

原来我的问题是使用jdk 7和mahout 0.4。我将其更改为jdk 6,之后所有工作都很完美。

相关问题