2012-03-30 59 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. 兼容性它會像魔法