Настройка пути к классу java для lucene на mac

#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