由不正确的类路径导致的java.lang.NoSuchMethodException?

时间:2012-03-30 15:30:17

标签: java classpath

我正在尝试执行以下命令(Mahout和Lucene来自Apache)时,我只能猜测是类路径的学生错误:

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 jar添加到类路径中: export CLASSPATH=$CLASSPATH:mahout-distribution-0.6/lib/*

作为旁注,在“-a”标志处指定类时没有自动完成。这是否表明我的罐子不可见?我在另一个系统上有这个自动完成功能。

我的机器正在运行Java(TM)SE运行时环境(版本1.6.0_26-b03)

2 个答案:

答案 0 :(得分:0)

你需要将jar放在eclipse的类路径中:

  1. 如果不起作用,请尝试执行以下操作:
  2. 下载最新版本的 eclipse
  3. 下载最新版本的罐子
  4. 检查它们与其他相关罐子的兼容性
  5. 重新启动 eclipse
  6. 它会像魔术一样工作

答案 1 :(得分:0)

这可能是因为export CLASSPATH=$CLASSPATH:mahout-distribution-0.6/lib/*而发生的。星号*将扩展为空格分隔的JAR名称,而冒号是预期的。您可以尝试这样做以使分隔符正确:

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