Я пытаюсь перенести приложение Java, использующее Tika, с OracleJDK 1.8 на OPenJDK 13.
Моя IDE — Eclipse.
Я создал файл module-info.java
, чтобы указать необходимые модули для моего приложения.
Чтобы иметь возможность использовать классы Tika, такие как AbstractParser
, Detector
и т. д., я добавил requires org.apache.tika.core;
в module-info.java
.
Мой код также использует класс org.apache.tika.parser.pdf.PDFParserConfig
для извлечения встроенных изображений:
PDFParserConfig pdfConfig = new PDFParserConfig();
pdfConfig.setExtractInlineImages(true);
context.set(PDFParserConfig.class, pdfConfig);'
Я получаю ошибку компиляции:
PDFParserConfig cannot be resolved to a type
Eclipse предлагает добавить requires org.apache.tika.parsers;
к module-info.java
: скриншот предложения Eclipse.
Когда я добавляю это требование к модулю в module-info.java
, приложение компилируется правильно.
То есть на данном этапе мы включили в module-info.java
:
module myapp {
/** others ... */
requires org.apache.tika.core;
requires org.apache.tika.parsers;
}
Однако при попытке выполнить скомпилированное приложение мы получаем ошибку:
Error occurred during initialization of boot layer
java.lang.module.FindException: Unable to derive module descriptor for C:\Users\Admin\.m2\repository\org\apache\tika\tika-parsers\1.24\tika-parsers-1.24.jar
Caused by: java.lang.module.InvalidModuleDescriptorException: Provider class org.apache.tika.parser.onenote.OneNoteParser not in module
Изучая библиотеки проекта в Eclipse, я вижу, что tika-core и tika-parsers (v1.24) являются модульными: Путь сборки Java для Eclipse
В заключение: если я не добавлю org.apache.tika.parsers
в качестве обязательного модуля, приложение не скомпилируется, а если я его добавлю, я получу ошибку времени выполнения, говорящую, что org.apache.tika.parser.onenote.OneNoteParser
не находится в модуле.
Я проверил файлы JAR для этих пакетов, чтобы увидеть их зависимости. Основные пакеты кажутся правильными:
$ jar --file=tika-core-1.24.jar --describe-module
No module descriptor found. Derived automatic module.
[email protected] automatic
requires java.base mandated
contains org.apache.tika
contains org.apache.tika.concurrent
contains org.apache.tika.config
contains org.apache.tika.detect
contains org.apache.tika.embedder
contains org.apache.tika.exception
contains org.apache.tika.extractor
contains org.apache.tika.fork
contains org.apache.tika.io
contains org.apache.tika.language
contains org.apache.tika.language.detect
contains org.apache.tika.language.translate
contains org.apache.tika.metadata
contains org.apache.tika.mime
contains org.apache.tika.parser
contains org.apache.tika.parser.digest
contains org.apache.tika.parser.external
contains org.apache.tika.sax
contains org.apache.tika.sax.xpath
contains org.apache.tika.utils
... но jar "парсеров" выдает ошибку:
$ jar --file=tika-parsers-1.24.jar --describe-module
Unable to derive module descriptor for: tika-parsers-1.24.jar
Provider class org.apache.tika.parser.onenote.OneNoteParser not in module
Означает ли это, что пакет jar для парсеров сформирован неправильно? Есть ли обходной путь для этого?
Спасибо.
EDIT: Если я попробую версию 1.24.1, я получу ошибку выполнения:
Error occurred during initialization of boot layer
java.lang.module.FindException: Unable to derive module descriptor for C:\Users\Admin\.m2\repository\org\apache\tika\tika-parsers\1.24.1\tika-parsers-1.24.1.jar
Caused by: java.lang.module.InvalidModuleDescriptorException: Provider class org.apache.tika.parser.external.CompositeExternalParser not in module
То есть: неудачный класс — CompositeExternalParser
вместо OneNoreParser
.
Проверка META-INF/services/org.apache.tika.parser.Parser
tika-parsers-1.42.1.jarI can see the entry
org.apache.tika.parser.external.CompositeExternalParser`, но пакет не содержит этого класса.
Итак, похоже, ошибка в этом файле META-INF. Это связано с ошибкой при компиляции пакета и отправке его в Maven Central?
Я нашел проблему JIRA, TIKA-2929, где говорится " Apache Tika должен находиться в пути к классам Java, а не в пути к модулю». Я пробовал это, но, как объяснялось ранее, я получаю ошибку компиляции, если не добавляю ее в путь к модулю и не устанавливаю requires org.apache.tika.parsers;
.
Это трудная головоломка...
PDFParserConfig cannot be resolved to a type
. - person Mbr   schedule 08.06.2020Properties
/Java Build Path
) я вижу, что Classpath содержит зависимости Maven, а внутри него tika-parsers-1.41.1.jar б> указан. Я понимаю, что это означает, что эта банка включена в путь к классам. Однако для разрешения PDFParserConfig Eclipse требует, чтобы я добавил модуль org.apache.tika.parsers в module-info.java. Если я это сделаю, он скомпилируется. Однако при выполнении я получаю сообщение об ошибке, указывающее, что дескриптор модуля не может быть получен из tika-parsers-1.24.1.jar. - person Mbr   schedule 09.06.2020