#java #macos #lucene #classpath
#java #macos #lucene #путь к классу
Вопрос:
Я загрузил банки lucene, а затем добавил их в переменную CLASSPATH через my .bash_profile, пути к банкам отображаются в терминале правильно.
export CLASSPATH=/Users/dk/lucene-3.4.0/lucene-core-3.4.0.jar
export CLASSPATH=$CLASSPATH:/Users/dk/lucene-3.4.0/contrib/demo/lucene-demo-3.4.0.jar
echo $CLASSPATH
/Users/dk/lucene-3.4.0/lucene-core-3.4.0.jar:/Users/dk/lucene-3.4.0/contrib/demo/lucene-demo-3.4.0.jar
Однако java все еще жалуется мне, когда я пытаюсь запустить демонстрацию:
java org.apache.lucene.demo.IndexFiles -docs .
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/lucene/demo/IndexFiles
Caused by: java.lang.ClassNotFoundException: org.apache.lucene.demo.IndexFiles
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
......
Я смог выполнить эту точную процедуру, чтобы заставить демонстрационную версию lucene работать на компьютере с Ubuntu, теперь я просто хочу, чтобы она могла работать на моем mac. Кажется, что вокруг stackoverflow возникают похожие вопросы, но ни один из них, похоже, не отвечает на этот вопрос.
Ответ №1:
Вы уверены, что у вас правильные пути? Для меня это работает нормально.
.../lucene-3.4.0/tmp $ ls
lucene-core-3.4.0.jar lucene-demo-3.4.0.jar
.../lucene-3.4.0/tmp $ export CLASSPATH=./lucene-core-3.4.0.jar:./lucene-demo-3.4.0.jar
.../lucene-3.4.0/tmp $ echo $CLASSPATH
./lucene-core-3.4.0.jar:./lucene-demo-3.4.0.jar
.../lucene-3.4.0/tmp $ java org.apache.lucene.demo.IndexFiles -docs .
Indexing to directory 'index'...
adding ./lucene-core-3.4.0.jar
adding ./lucene-demo-3.4.0.jar
1485 total milliseconds
.../lucene-3.4.0/tmp $
Комментарии:
1. вы правы, я по ошибке пропустил часть пути! глупый вопрос, но возможно ли также получить завершение табуляции для jar в пути к классу? Пока мне приходится вводить полное имя класса, что раздражает.
2. @Damonkashu Да, пути к классам могут быть проблемой. Кстати, я обычно не рекомендую указывать путь к классу среды — лучше настроить его в сценарии оболочки. Я знаю, что вы могли бы реализовать завершение имени класса в bash (поиск «bash-completion»), но я не знаю как. Zsh имеет его по умолчанию, что довольно круто.
Ответ №2:
Начиная с версии Lucene 6.0, они, похоже, работают:
java -cp ./core/lucene-core-6.0.0.jar:./analysis/common/lucene-analyzers-common-6.0.0.jar:./demo/lucene-demo-6.0.0.jar org.apache.lucene.demo.IndexFiles -docs <directory to index>
Для демонстрации поиска:
java -cp ./core/lucene-core-6.0.0.jar:./analysis/common/lucene-analyzers-common-6.0.0.jar:./queryparser/lucene-queryparser-6.0.0.jar:./demo/lucene-demo-6.0.0.jar org.apache.lucene.demo.SearchFiles