2012-11-08 2 views
2

마호트를 배우기 시작했으나, 첫 단계에서 내 프로그램에 이상한 오류가 발생했습니다. 나는 몇 줄의 간단한 추천인 구축을 위해 노력 해요 :NoClassDefFoundError (마호를 사용)

import java.util.List; 
import java.io.File; 
import org.apache.mahout.cf.taste.model.DataModel; 
import org.apache.mahout.cf.taste.impl.model.file.FileDataModel; 
import org.apache.mahout.cf.taste.similarity.UserSimilarity; 
import org.apache.mahout.cf.taste.impl.similarity.PearsonCorrelationSimilarity; 
import org.apache.mahout.cf.taste.neighborhood.UserNeighborhood; 
import org.apache.mahout.cf.taste.impl.neighborhood.NearestNUserNeighborhood; 
import org.apache.mahout.cf.taste.recommender.Recommender; 
import org.apache.mahout.cf.taste.recommender.RecommendedItem; 
import org.apache.mahout.cf.taste.impl.recommender.GenericUserBasedRecommender; 
/** 
*/ 
public class RecommenderIntro { 
    public static void main(String[] args) throws Exception { 
     // TODO code application logic here 
     DataModel model = 
       new FileDataModel (new File("intro.csv")); 
     UserSimilarity similarity = 
       new PearsonCorrelationSimilarity (model); 
     UserNeighborhood neighborhood = 
       new NearestNUserNeighborhood (2, similarity, model); 
     Recommender recommender = new GenericUserBasedRecommender (
       model, neighborhood, similarity); 
     List<RecommendedItem> recommendations = 
       recommender.recommend(1, 1); 
     for (RecommendedItem recommendation : recommendations) { 
      System.out.println(recommendation); 
     } 
    } 
} 

을하지만 난이 오류

Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory 
    at org.apache.mahout.cf.taste.impl.model.file.FileDataModel.<clinit>(FileDataModel.java:119) 
    at recommenderintro.RecommenderIntro.main(RecommenderIntro.java:28) 
Caused by: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:217) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:205) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:321) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:266) 
    ... 2 more 
Java Result: 1 

이 코드의 문제가 무엇을 얻을? 나는 책에서 그것을 베꼈다!


그러나 나는 다음과 같은 오류 얻을 모든 jar 파일 사용 :

SLF4J: Class path contains multiple SLF4J bindings. 
SLF4J: Found binding in [jar:file:/home/omid/Desktop/slf4j-1.7.2/slf4j-jcl-1.7.2.jar!/org/slf4j/impl/StaticLoggerBinder.class] 
SLF4J: Found binding in [jar:file:/home/omid/Desktop/slf4j-1.7.2/slf4j-jdk14-1.7.2.jar!/org/slf4j/impl/StaticLoggerBinder.class] 
SLF4J: Found binding in [jar:file:/home/omid/Desktop/slf4j-1.7.2/slf4j-log4j12-1.7.2.jar!/org/slf4j/impl/StaticLoggerBinder.class] 
SLF4J: Found binding in [jar:file:/home/omid/Desktop/slf4j-1.7.2/slf4j-nop-1.7.2.jar!/org/slf4j/impl/StaticLoggerBinder.class] 
SLF4J: Found binding in [jar:file:/home/omid/Desktop/slf4j-1.7.2/slf4j-simple-1.7.2.jar!/org/slf4j/impl/StaticLoggerBinder.class] 
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. 
SLF4J: Detected both jcl-over-slf4j.jar AND slf4j-jcl.jar on the class path, preempting StackOverflowError. 
SLF4J: See also http://www.slf4j.org/codes.html#jclDelegationLoop for more details. 
Exception in thread "main" java.lang.ExceptionInInitializerError 
    at org.slf4j.impl.StaticLoggerBinder.<init>(StaticLoggerBinder.java:73) 
    at org.slf4j.impl.StaticLoggerBinder.<clinit>(StaticLoggerBinder.java:42) 
    at org.slf4j.LoggerFactory.bind(LoggerFactory.java:128) 
    at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:107) 
    at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:295) 
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:269) 
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:281) 
    at org.apache.mahout.cf.taste.impl.model.file.FileDataModel.<clinit>(FileDataModel.java:119) 
    at recommenderintro.RecommenderIntro.main(RecommenderIntro.java:28) 
Caused by: java.lang.IllegalStateException: Detected both jcl-over-slf4j.jar AND slf4j-jcl.jar on the class path, preempting StackOverflowError. See also http://www.slf4j.org/codes.html#jclDelegationLoop for more details. 
    at org.slf4j.impl.JCLLoggerFactory.<clinit>(JCLLoggerFactory.java:55) 
    ... 9 more 
Java Result: 1 

내가 별도의 jar 파일을 사용하고 있습니까?

+1

일반적으로 다른 소프트웨어에 의존하는 프로그램을 작성할 때 실행하는 데 의존하는 모든 소프트웨어를 포함시켜야합니다. 이것은 다르지 않다. –

답변

0

감사합니다.

이 문제에 대한 많은 혼란 끝에 마침내 문제가 해결되었습니다! 난 그냥 mahout 디렉토리에 웹 및 "mahout/utils/target/dependency/"의 모든 항아리 파일을 classpath에 추가했습니다.

mahout을 설치하기 위해 maven을 사용했기 때문에 ".m2/" 폴더에 jar 파일을 사용할 수도 있지만 첫 번째 해결 방법은 훨씬 간단합니다.

+0

IDE 프로젝트가 아닌 Maven의 프로젝트를 사용하는 것이 더 낫습니다. 종속성으로 조작하기가 훨씬 쉽고 IDE없이 프로젝트를 빌드 할 수 있습니다. –

+0

하지만 어떻게 할 수 있습니까? 나는 그것에 익숙하지 않다! – orezvani

+0

예제에서'pom.xml'을 가져 와서 코드를 추가 할 수 있습니다. 기억한다면, 이클립스는 Maven 프로젝트를 직접 생성 할 수있다. 단지'm2e' 플러그인 만 설치하면된다. –

3

클래스 패스에 slf4j 프로젝트의 jar가 필요합니다.

다운로드가에서 : http://www.slf4j.org/download.html

+0

이제 다른 오류가 발생합니다. – orezvani

+0

@emab 다시 NoClassDefFoundError입니까? –

+0

다음 답안에서 오류를 인쇄했습니다 – orezvani

2

, the repository with source code for examples에서, 적어도 pom.xml을 소스 코드를 가지고, 또는하시기 바랍니다. 이 pom.xml은 모든 종속성을 지정하고 모든 것은 다른 Mahout 버전에서 작동하는지 테스트되었습니다. 예제 작업을 시작하는 방법에 대해서는 this blog post을 참조하십시오.

관련 문제