Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Tika和Java13编译应用程序-加载模块时遇到的问题_Java_Eclipse_Apache Tika_Module Info - Fatal编程技术网

使用Tika和Java13编译应用程序-加载模块时遇到的问题

使用Tika和Java13编译应用程序-加载模块时遇到的问题,java,eclipse,apache-tika,module-info,Java,Eclipse,Apache Tika,Module Info,我正在尝试将一个使用Tika的Java应用程序从OracleJDK1.8迁移到OpenJDK13 我的IDE是Eclipse 我已经创建了文件module info.java,以指示我的应用程序所需的模块 为了能够使用Tika类,例如AbstractParser,Detector,我添加了requires org.apache.Tika.core在模块信息.java中 我的代码还使用类org.apache.tika.parser.pdf.PDFParserConfig提取嵌入图像: PDFPar

我正在尝试将一个使用Tika的Java应用程序从OracleJDK1.8迁移到OpenJDK13

我的IDE是Eclipse

我已经创建了文件
module info.java
,以指示我的应用程序所需的模块

为了能够使用Tika类,例如
AbstractParser
Detector
,我添加了
requires org.apache.Tika.core
模块信息.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
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
Eclipse建议添加
需要org.apache.tika.parsers
模块信息.java

当我将此模块需求添加到
module info.java
时,应用程序可以正确编译

也就是说,在这个阶段,我们在
模块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解析器(v1.24)都是模块化的:

总之:如果我没有将
org.apache.tika.parsers
添加为必需的模块,应用程序将不会编译,如果我添加它,则会出现运行时错误,即
org.apache.tika.parser.onenote.onenote.OneNoteParser
不在模块中

我已经检查了这些包的JAR文件,以查看它们的依赖关系。核心包似乎是正确的:

$ jar --file=tika-core-1.24.jar --describe-module

No module descriptor found. Derived automatic module.

org.apache.tika.core@1.24 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
…但“parsers”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包格式不好? 有什么解决办法吗

多谢各位

编辑: 如果我尝试使用版本1.24.1,则会出现执行错误:

PDFParserConfig cannot be resolved to a type
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

检查tika-parsers-1.42.1.jar的
META-INF/services/org.apache.tika.parser.parser
,我可以看到条目
org.apache.tika.parser.external.CompositeeExternalParser`但包不包含此类

因此,这个META-INF文件中似乎有一个错误。这是由于编译包并将其提交给Maven Central时出错造成的吗

我发现了一个JIRA问题,他们说“ApacheTika需要在Java类路径上,而不是模块路径上”。我已经试过了,但是,如前所述,如果我不将其添加到模块路径并设置
requires org.apache.tika.parsers,我会得到一个编译错误


这是一个难题…

遇到了同样的问题。

org.apache.tika.parser.parser
(以及
org.apache.tika.parser.Detector
)中的
META-INF/services/

一个快速解决方法是

  • 打开那些文件
  • 删除似乎引用不存在类的行
  • 把它们装回罐子里
我的项目在此之后编译。

当然,没有长期的解决方案,但由于我尝试的旧版本也遇到了这个问题,它可能会帮助一些人。

Java模块路径中解决(但未解决)的问题对于支持多个Java版本的长期模块来说并不好用。为什么不直接使用类路径呢?也许我错了,但是当我试图在类路径中设置它时,代码不会编译。错误是PDFParserConfig无法解析为类型
。您仍然需要将该类导入java代码在Eclipse中(
属性
/
java构建路径
),我可以看到该类路径包含Maven依赖项,其中列出了tika-parsers-1.41.1.jar。我理解这意味着这个jar包含在类路径中。但是,为了解析PDFParserConfig,Eclipse要求我在module-info.java中添加模块org.apache.tika.parsers。如果我这样做,它就会编译。但是,在执行时,我得到一个错误,指示无法从“tika-parsers-1.24.1.jar”派生模块描述符