2012-03-30 53 views
0
我有

,我只能猜测是classpath中小学生的错误,而试图执行以下命令(象夫和Lucene是来自Apache的):由不正确的类路径导致的java.lang.NoSuchMethodException?

bin/mahout seq2sparse -i <input-dir> -o <output-dir> -wt tfidf -chunk 50 \ 
-a org.apache.lucene.analysis.standard.StandardAnalyzer --minSupport 2\ 
--minDF 2 --maxDFPercent 75 --norm 2 

这给我的错误:

Exception in thread "main" java.lang.IllegalStateException: java.lang.NoSuchMethodException: org.apache.lucene.analysis.standard.StandardAnalyzer.<init>() 
at org.apache.mahout.common.ClassUtils.instantiateAs(ClassUtils.java:68) 
at org.apache.mahout.vectorizer.SparseVectorsFromSequenceFiles.run(SparseVectorsFromSequenceFiles.java:204) 
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:65) 
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:79) 
at org.apache.mahout.vectorizer.SparseVectorsFromSequenceFiles.main(SparseVectorsFromSequenceFiles.java:55) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
at java.lang.reflect.Method.invoke(Method.java:597) 
at org.apache.hadoop.util.ProgramDriver$ProgramDescription.invoke(ProgramDriver.java:68) 
at org.apache.hadoop.util.ProgramDriver.driver(ProgramDriver.java:139) 
at org.apache.mahout.driver.MahoutDriver.main(MahoutDriver.java:188) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
at java.lang.reflect.Method.invoke(Method.java:597) 
at org.apache.hadoop.util.RunJar.main(RunJar.java:156) 
Caused by: java.lang.NoSuchMethodException: org.apache.lucene.analysis.standard.StandardAnalyzer.<init>() 
at java.lang.Class.getConstructor0(Class.java:2706) 
at java.lang.Class.getConstructor(Class.java:1657) 
at org.apache.mahout.common.ClassUtils.instantiateAs(ClassUtils.java:62) 
... 16 more 

预期的方法是Apache Lucene库的一部分,它不是我自己的代码。 export CLASSPATH=$CLASSPATH:mahout-distribution-0.6/lib/*

作为一个侧面说明,在指定的“-a”标志的类时,有没有自动完成: 我一直在使用下面添加了Lucene jar添加到类路径中。这是我的罐子不可见的迹象吗?我在另一个系统上进行了自动补全。

我的机器上运行Java(TM)SE运行时环境(建立1.6.0_26-B03)

+0

我想通过修改你的main函数开始,只需做一个'的System.out.println(“CLASSPATH =” + System.getProperty(“java的开始.class.path“);'并检查打印的类路径以确保它包含您期望的罐子。 – Alderath 2012-03-30 15:38:30

回答

0

因为export CLASSPATH=$CLASSPATH:mahout-distribution-0.6/lib/*它可能发生。星号*将展开为由空格分隔的JAR的名称,同时预计冒号。你可以试试这个代替,以获得正确的分隔符:

for jar in mahout-distribution-0.6/lib/*; do 
    export CLASSPATH="$CLASSPATH":"$jar" 
done 
0

你需要把罐子在Eclipse的类路径:

  1. 如果它不“科技工作尽量做到以下几点:
  2. 下载最新版本的日食
  3. 下载最新版本的罐子
  4. 检查他们的与其他依赖jar
  5. 并重新启动日食
  6. 兼容性它会像魔法