2013-06-07 3 views
1

Я написал программу Java, используя Lucene в Eclipse Juno. Всякий раз, когда я пытаюсь запустить его, он дает следующие ошибки:Обработка java.lang.VerifyError

Exception in thread "main" java.lang.VerifyError: Cannot inherit from final class 

at java.lang.ClassLoader.defineClass1(Native Method) 
at java.lang.ClassLoader.defineClass(ClassLoader.java:634) 
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 
at java.net.URLClassLoader.defineClass(URLClassLoader.java:277) 
at java.net.URLClassLoader.access$000(URLClassLoader.java:73) 
at java.net.URLClassLoader$1.run(URLClassLoader.java:212) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(URLClassLoader.java:205) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:321) 
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:266) 
at parser.BuildMainIndex.setUp(BuildMainIndex.java:339) 
at parser.luceneDemo.main(luceneDemo.java:10) 

и источник ошибки, т.е. линии в BuildManinIndex.java является:

 doc.add(new IntField("startTime1",startTime1,Field.Store.YES)); 

Здесь startTime1 это поле в документе, индексироваться. Раньше я использовал Lucene 3.6.0, и теперь я использую Lucene 4.3.0. Я ничего не импортировал из java.net.URL. Я не имею в виду возможную причину этой ошибки. Пожалуйста помоги.

EDIT: Эта следующая короткая программа, которую я написал.

writer=new IndexWriter(directory,new StandardAnalyzer(Version.LUCENE_CURRENT),IndexWriter.MaxFieldLength.UNLIMITED); 

Document doc=new Document(); 
doc.add(new Field("title","XYZ",Field.Store.YES,Field.Index.ANALYZED)); 
doc.add(new Field("address","ABC Road",Field.Store.YES,Field.Index.ANALYZED)); 
doc.add(new Field("city","Mumbai",Field.Store.YES,Field.Index.ANALYZED)); 
doc.add(new IntField("startTime1",900,Field.Store.YES)); 
doc.add(new IntField("finishTime1",1000,Field.Store.YES)); 
doc.add(new IntField("startTime2",9999,Field.Store.YES)); 
doc.add(new IntField("finishTime2",9999,Field.Store.YES)); 

writer.addDocument(doc); 
writer.close(); 
+0

Это не похоже, что это вызовет эту проблему. Можете ли вы воспроизвести это с помощью короткой, но полной программы? Вы перестроили все с нуля против Lucence 4.3.0? –

+0

Хорошо, сэр. Я пытаюсь. – Joy

+0

Да, сэр. Ошибка все еще идет. Теперь я написал короткую программу для простого добавления одного документа в индекс. Всякий раз, когда я комментирую эту ошибку строки, исчезает. – Joy

ответ

1

Сообщение об ошибке немного сбивает с толку, потому что вы не наследуя IntField класс, вы создаете экземпляр этого, не так ли?

doc.add(new IntField("startTime1", startTime1, Field.Store.YES)); 

Проблема заключается в первой части этого заявления doc.add(..). Был изменен класс Document между версиями Lucene 3.6.0 и 4.x - add(..) в 3.6 принимает Fieldable (class API), а в 4.1.0 принимает IndexableField (class API).

Полезно article на VerifyError. Или this StackOverflow answer.

Кроме того, в Lucene 3.6.0 нет IntField, то есть класс от Apache Solr (class API), но есть один в Lucene 4.1.0. Вероятно, вы используете версию версии IntField версии 3.6, которая не то же самое, что и Lucene. Проверьте свои import и ваш путь к классу.

UPDATE

Joy, самое простое решение для Вас, чтобы удалить старые файлы JAR Lucene из /home/abhishek/mtp/stage-2/software/apache-tomcat-7.0.37/lib и поставить новые, а Refresh проект в Eclipse.

Мой совет для вас - перейти на Apache Maven для управления зависимостями (есть плагин Maven для Eclipse). В Eclipse вы создаете «Новый проект Maven» и добавляете зависимости к файлу pom.xml - example for Lucene. Таким образом, вам не нужно копировать файлы JAR в ваш проект или Tomcat.

Удачи.

+0

Я импортировал Lucene 4.2.0, но, поскольку я пишу его как часть динамического веб-проекта, Lucene 3.6.0.jar включен в Apache Tomcat 7.0. – Joy

+1

Проверьте свои операторы 'import', чтобы увидеть, какой' IntField' вы импортируете, Solr (Lucene 3.6) или Lucene 4.0. Использование двух разных версий JAR ** не является хорошей идеей **, поскольку вы получите странные проблемы с classpath. – Cebence

+0

Да, сэр, я импортировал Lucene 4.2.0. Но поскольку я пишу это как часть динамического веб-проекта, поэтому в библиотеках Tomcat7.0 включен Lucene 3.6.0. Это причина ошибки? – Joy

Смежные вопросы