2012-03-30 4 views
0

Я имею, что я могу только догадываться, ошибка школьника с пути к классам при попытке выполнить следующую команду (Mahout и 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, это не мой собственный код. Я добавил банки Lucene к классам, используя следующие: export CLASSPATH=$CLASSPATH:mahout-distribution-0.6/lib/*

Как примечание стороны, нет автозаполнения при определении класса на флаг «-a». Является ли это признаком того, что моя банка не видна? У меня была эта автозаполнение в другой системе.

Моя машина работает на Java (TM) SE Runtime Environment (сборка 1.6.0_26-b03)

+0

Я хотел бы начать путем изменения основной функции и просто начать делать 'System.out.println («Classpath =»+ System.getProperty (" Java .class.path ");' и проверьте путь к печатному классу, чтобы убедиться, что он содержит банки, которые вы ожидаете. – Alderath

ответ

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

Вам нужно поставить банки в класс-путь затмения:

  1. Если это Безразлично «т работает, попробуйте сделать следующее:
  2. Загрузите последнюю версию затмить
  3. Скачать последнюю версию ваших баночек
  4. Проверьте их Совместимость с другими зависимыми баночками
  5. И перезапуск затмением
  6. Он будет работать как по волшебству
Смежные вопросы