【发布时间】:2015-03-30 16:00:37
【问题描述】:
我是一个Java新手,事实上我使用它的唯一原因是因为lucene。
我在 Windows 上使用 eclipse 开发了一个 lucene 应用程序并工作。所以现在当我尝试从 Linux 命令行编译应用程序时,它不起作用。
这是我的文件夹结构。
search_example/
├── lucene-5.0.0
│ ├── analysis
│ │ └── common
│ │ └── lucene-analyzers-common-5.0.0.jar
│ ├── core
│ │ └── lucene-core-5.0.0.jar
│ ├── queries
│ │ └── lucene-queries-5.0.0.jar
│ └── queryparser
│ └── lucene-queryparser-5.0.0.jar
├── lucene_test
│ ├── IndexFiles.java
│ ├── IndexMarkdown.java
│ ├── SearchFiles.java
│ └── SearchMarkdown.java
└── readme.md
这里是编译调用:
$ cd ~/search_example
$ javac lucene_test/IndexMarkdown.java -classpath ./; lucene-5.0.0/analysis/common/lucene-analyzers-common-5.0.0.jar; lucene-5.0.0/core/lucene-core-5.0.0.jar; lucene-5.0.0/queries/lucene-queries-5.0.0.jar ; lucene-5.0.0/queryparser/lucene-queryparser-5.0.0.jar
我得到以下错误,表明它找不到我作为“类路径”传入的“jar”文件
./lucene_test/IndexFiles.java:20: error: package org.apache.lucene.analysis does not exist
import org.apache.lucene.analysis.Analyzer;
^
./lucene_test/IndexFiles.java:21: error: package org.apache.lucene.analysis.standard does not exist
import org.apache.lucene.analysis.standard.StandardAnalyzer;
^
./lucene_test/IndexFiles.java:22: error: package org.apache.lucene.document does not exist
import org.apache.lucene.document.Document;
^
./lucene_test/IndexFiles.java:23: error: package org.apache.lucene.document does not exist
import org.apache.lucene.document.Field;
^
./lucene_test/IndexFiles.java:24: error: package org.apache.lucene.document does not exist
import org.apache.lucene.document.LongField;
^
./lucene_test/IndexFiles.java:25: error: package org.apache.lucene.document does not exist
import org.apache.lucene.document.StringField;
^
./lucene_test/IndexFiles.java:26: error: package org.apache.lucene.document does not exist
import org.apache.lucene.document.TextField;
^
./lucene_test/IndexFiles.java:27: error: package org.apache.lucene.index does not exist
import org.apache.lucene.index.IndexWriter;
^
./lucene_test/IndexFiles.java:28: error: package org.apache.lucene.index.IndexWriterConfig does not exist
import org.apache.lucene.index.IndexWriterConfig.OpenMode;
^
./lucene_test/IndexFiles.java:29: error: package org.apache.lucene.index does not exist
import org.apache.lucene.index.IndexWriterConfig;
^
./lucene_test/IndexFiles.java:30: error: package org.apache.lucene.index does not exist
import org.apache.lucene.index.Term;
^
./lucene_test/IndexFiles.java:31: error: package org.apache.lucene.store does not exist
import org.apache.lucene.store.Directory;
^
./lucene_test/IndexFiles.java:32: error: package org.apache.lucene.store does not exist
import org.apache.lucene.store.FSDirectory;
^
./lucene_test/IndexFiles.java:52: error: cannot find symbol
private IndexWriter _writer;
^
symbol: class IndexWriter
location: class IndexFiles
./lucene_test/IndexFiles.java:73: error: cannot find symbol
Directory dir = FSDirectory.open(_indexPathObj);
^
symbol: class Directory
location: class IndexFiles
./lucene_test/IndexFiles.java:73: error: cannot find symbol
Directory dir = FSDirectory.open(_indexPathObj);
^
symbol: variable FSDirectory
location: class IndexFiles
./lucene_test/IndexFiles.java:74: error: cannot find symbol
Analyzer analyzer = new StandardAnalyzer();
^
symbol: class Analyzer
location: class IndexFiles
./lucene_test/IndexFiles.java:74: error: cannot find symbol
Analyzer analyzer = new StandardAnalyzer();
^
symbol: class StandardAnalyzer
location: class IndexFiles
./lucene_test/IndexFiles.java:75: error: cannot find symbol
IndexWriterConfig iwc = new IndexWriterConfig(analyzer);
^
symbol: class IndexWriterConfig
location: class IndexFiles
./lucene_test/IndexFiles.java:75: error: cannot find symbol
IndexWriterConfig iwc = new IndexWriterConfig(analyzer);
^
symbol: class IndexWriterConfig
location: class IndexFiles
./lucene_test/IndexFiles.java:76: error: cannot find symbol
iwc.setOpenMode(OpenMode.CREATE_OR_APPEND);
^
symbol: variable OpenMode
location: class IndexFiles
./lucene_test/IndexFiles.java:77: error: cannot find symbol
_writer = new IndexWriter(dir, iwc);
^
symbol: class IndexWriter
location: class IndexFiles
./lucene_test/IndexFiles.java:161: error: cannot find symbol
Document doc = new Document();
^
symbol: class Document
location: class IndexFiles
./lucene_test/IndexFiles.java:161: error: cannot find symbol
Document doc = new Document();
^
symbol: class Document
location: class IndexFiles
./lucene_test/IndexFiles.java:164: error: cannot find symbol
doc.add(new TextField("category", category, Field.Store.YES));
^
symbol: class TextField
location: class IndexFiles
./lucene_test/IndexFiles.java:164: error: package Field does not exist
doc.add(new TextField("category", category, Field.Store.YES));
^
./lucene_test/IndexFiles.java:165: error: cannot find symbol
doc.add(new StringField("subject", subject, Field.Store.YES));
^
symbol: class StringField
location: class IndexFiles
./lucene_test/IndexFiles.java:165: error: package Field does not exist
doc.add(new StringField("subject", subject, Field.Store.YES));
^
./lucene_test/IndexFiles.java:175: error: cannot find symbol
doc.add(new LongField("modified", lastModified, Field.Store.NO));
^
symbol: class LongField
location: class IndexFiles
./lucene_test/IndexFiles.java:175: error: package Field does not exist
doc.add(new LongField("modified", lastModified, Field.Store.NO));
^
./lucene_test/IndexFiles.java:181: error: cannot find symbol
doc.add(new TextField("contents", new BufferedReader(new InputStreamReader(stream, StandardCharsets.UTF_8))));
^
symbol: class TextField
location: class IndexFiles
./lucene_test/IndexFiles.java:184: error: cannot find symbol
if (_writer.getConfig().getOpenMode() == OpenMode.CREATE)
^
symbol: variable OpenMode
location: class IndexFiles
./lucene_test/IndexFiles.java:195: error: cannot find symbol
_writer.updateDocument(new Term("path", file.toString()), doc);
^
symbol: class Term
location: class IndexFiles
更新:
由于我在 Linux 操作系统上编译,classpath 中的多个目录应该用冒号 (:) 而不是分号 (;) 分隔。所以这里是新的复杂代码,我也包含了jar文件的完整路径,但它仍然找不到那些jar文件中定义的类。
javac -classpath ~/search_example/lucene-5.0.0/analysis/common/lucene-analyzers-common-5.0.0.jar:~/search_example/lucene-5.0.0/core/lucene-core-5.0.0.jar:~/search_example/lucene-5.0.0/queries/lucene-queries-5.0.0.jar:~/search_example/lucene-5.0.0/queryparser/lucene-queryparser-5.0.0.jar lucene_test/*.java
【问题讨论】:
-
用 maven 或 gradle 或 Unix 试试,我们会这样做: javac -classpath dir1:dir2:dir3 ... 而在 Windows 上我们有: javac -classpath dir1;dir2;dir3 ..
-
我不需要用类路径指定 jar1:jar2 吗?这似乎是一个非常容易编译的项目,不需要 3rd 方构建管理工具,所以如果可以的话,我想避免使用。
-
是因为你的类路径中的 jar 文件条目之间有空格吗?
-
@learningJava 感谢您的链接,这正是我所需要的
标签: java linux compilation