当前位置: 首页 > 知识库问答 >
问题:

找不到lucene主函数

白侯林
2023-03-14

我为我的文本分析项目运行lucene库(我对java相对较新)。主功能(或命令)有问题。

我使用的lucene版本是3.0.0,已经编译成JAR文件。JAR文件与主类文件Indexer.java位于同一文件夹中。

我首先运行编译代码:

javac -cp \lucene-core-3.0.0.jar Indexer.java

它工作正常,创建了索引器。类文件位于同一目录中。

然后我运行同样的命令:

java -cp \lucene-core.3.0.0.jar Indexer

这次命令行输出说我没有主类Indexer:

could not find or load main class Indexer

我检查了原始的java代码,其中定义了main方法:

import org.apache.lucene.index.*;

import java.io.IOException;
import java.io.File;


import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.analysis.standard.*;
import org.apache.lucene.util.Version;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;

import java.io.FileReader;


public class Indexer {

private IndexWriter writer;

private void indexFile(File f) throws Exception{
    System.out.println("Indexing " + f.getCanonicalPath());
    Document doc = getDocument(f);
    if(doc != null){
        writer.addDocument(doc);
    }
}

public Indexer(String IndexDir) throws IOException{
    Directory dir = FSDirectory.open(new File(IndexDir));
    writer = new IndexWriter(dir,new StandardAnalyzer(Version.LUCENE_30),
                                        true,IndexWriter.MaxFieldLength.UNLIMITED);
}


protected Document getDocument(File f) throws Exception{
    Document doc = new Document();

    doc.add(new Field("contents", new FileReader(f)));
    doc.add(new Field("filename",
                        f.getName(), 
                        Field.Store.YES,
                        Field.Index.NOT_ANALYZED));
    doc.add(new Field("fullpath",
                        f.getCanonicalPath(),
                        Field.Store.YES,
                        Field.Index.NOT_ANALYZED));
    return doc;
}

protected boolean acceptFile(File f){
    return f.getName().endsWith(".txt");
}


public int index(String dataDir) throws Exception{

    File[] files = new File(dataDir).listFiles();


    for(int i = 0; i < files.length;i++){
        File f = files[i];

        if(!f.isDirectory() 
            && !f.isHidden() 
            && f.exists()
            && f.canRead()
            && acceptFile(f)){
            indexFile(f);
        }
    }
    return writer.numDocs();
}

public void close() throws IOException{
    writer.close();
}

public static void main(String[] args) throws Exception{
    if(args.length != 2){
        throw new Exception("Usage: java " + Indexer.class.getName()+" <index dir><data dir");
    }

    String indexDir = args[0];
    String dataDir = args[1];

    long start = System.currentTimeMillis();
    Indexer indexer = new Indexer(indexDir);
    int numIndexed = indexer.index(dataDir);
    indexer.close();
    long end = System.currentTimeMillis();

    System.out.println("Indexing " + 
            numIndexed + " files took " + (end-start)+ " milliseconds.");


}

}

我的代码/命令有什么问题?

共有1个答案

郎志
2023-03-14

当显式指定一个目录时,jvm不会在运行时类路径中包含当前目录。尝试

java -cp ".:lucene-core.3.0.0.jar" Indexer
 类似资料:
  • 我从http://lucene.apache.org/core/下载了代码,但我找不到我需要的代码。我读了以下的参考资料,但他们也没有帮助。 http://svn.apache.org/repos/asf/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/ http://oak.cs.ucla.edu/cs144/proj

  • 问题内容: 我已经编写了以下Java源文件(): 我将此保存到。 从命令行,我导航到该目录并运行。然后我运行: 然后,从我刚运行过的同一目录运行并获取: 这里发生了什么?!?如何运行正常,但不能运行? 问题答案: 您的课程属于该包。因此,您的课程的全限定名是。在命令行上使用java调用程序时,应提供包含方法的类的标准类名,并省略 .class ,如下所示: Java程序需要此完全限定的类名来了解您

  • 我在安装了OpenJDk 7的Ubuntu 12.04上使用Eclipse 3.7.2 java版本给出 每当我尝试运行项目时,都会收到以下错误。 所有项目都会发生这种情况,我已经在我的 Windows 系统上成功编译了这些项目。而且,当直接从终端使用 javac 和 java 时,它可以工作。有没有简单的解决方案?这是因为OpenJDK吗? 类代码是: 更新:我的源代码在一个名为swingtes

  • 我编写了以下Java源文件(): 我将其保存到。 null 这是怎么回事?!?如何才能使运行良好,而不能使运行良好?

  • 我正在尝试一个简单的教程 将java程序连接到简单的java数据库 使用NetBeans 7 IDE 这是教程的链接。 但当我运行该项目时,NetBeans给了我以下错误: 下面是主类的代码: 欢迎任何人提出建议。

  • 我的gradle身材有问题。我使用Spring网站提出的标准(https://spring.io/guides/gs/rest-service/),但当我尝试使用gradle build时,出现了以下错误: 它对这个毕业生不起作用,但当我用另一个(我在学校的时候用过的)时,它可以完美地工作。