Wildfly 上的 Tika-Parsers 部署问题
Tika-Parsers deployment issue on Wildfly
作为 Web 应用程序的一部分,我需要解析不同传入文件的文本内容。
使用 tika-parsers 这应该非常简单,但是一旦我尝试部署我的 webapp
关于 Wildfly(测试 V.8.2.1 和 V.10.0.0.RC4)我 运行 遇到问题。
这是我在一个非常基本的 webapp 中的 maven 依赖项:
<groupId>org.apache.tika</groupId>
<artifactId>tika-parsers</artifactId>
<version>1.11</version>
这是我在部署过程中遇到的错误(手动部署或使用 arquillian 进行测试):
Caused by: java.lang.Exception: {"WFLYCTL0080: Failed services" => {"jboss.deployment.unit.\"backend-test.war\".WeldStartService" => "org.jboss.msc.service.StartException in service jboss.deployment.unit.\"backend-test.war\".WeldStartService: Failed to start service
Caused by: org.jboss.weld.exceptions.DefinitionException: WELD-000071: Managed bean with a parameterized bean class must be @Dependent: class org.apache.cxf.jaxrs.provider.SourceProvider"}}
我假设存在依赖冲突,但不知道如何避免它。
beans.xml? jboss-部署-structure.xml?禁用任何 Wildfly 模块?
此致,
菲利普
除了 Tika 将大量有问题的依赖项以及大量非常不受欢迎的传递依赖项转储到您的运行时类路径中这一事实之外,您 运行 陷入了这个问题:
http://weld.cdi-spec.org/documentation/#4
https://issues.jboss.org/browse/CDI-377
基本上是CDI 1.1的不兼容问题,CDI 1.2已经解决了;在 Wildfly 中手动将 Weld 更新到版本 2.3.x 可能会完全解决问题。
除非进行手动升级,否则您可以通过声明具有以下内容的 META-INF/jboss-all.xml 文件来解决问题。假设你有一个war,精确的路径是webapp/META-INF/jboss-all.xml.
<jboss xmlns="urn:jboss:1.0">
<weld xmlns="urn:jboss:weld:1.0" require-bean-descriptor="true"/>
</jboss>
并确保在您自己需要 CDI 支持的模块中定义 WEB-INF/beans.xml 文件(同样:假设 war)。这会强制 Weld 仅尝试配置包含 beans.xml 文件的模块,而 CXF 不会。
除此之外,我将真正调查依赖树并查看通过 Tika 引入的内容;例如,您会发现 javax.inject API 被放在编译范围内,因此与您的应用程序一起部署,这是您真正不想要的。
如果有人还在寻找这个,您可以将这行添加到您的 pom.xml:
<dependency>
<groupId>org.apache.tika</groupId>
<artifactId>tika-parsers</artifactId>
<version>1.13</version>
<exclusions>
<exclusion>
<groupId>org.apache.cxf</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency>
作为 Web 应用程序的一部分,我需要解析不同传入文件的文本内容。 使用 tika-parsers 这应该非常简单,但是一旦我尝试部署我的 webapp 关于 Wildfly(测试 V.8.2.1 和 V.10.0.0.RC4)我 运行 遇到问题。
这是我在一个非常基本的 webapp 中的 maven 依赖项:
<groupId>org.apache.tika</groupId>
<artifactId>tika-parsers</artifactId>
<version>1.11</version>
这是我在部署过程中遇到的错误(手动部署或使用 arquillian 进行测试):
Caused by: java.lang.Exception: {"WFLYCTL0080: Failed services" => {"jboss.deployment.unit.\"backend-test.war\".WeldStartService" => "org.jboss.msc.service.StartException in service jboss.deployment.unit.\"backend-test.war\".WeldStartService: Failed to start service
Caused by: org.jboss.weld.exceptions.DefinitionException: WELD-000071: Managed bean with a parameterized bean class must be @Dependent: class org.apache.cxf.jaxrs.provider.SourceProvider"}}
我假设存在依赖冲突,但不知道如何避免它。 beans.xml? jboss-部署-structure.xml?禁用任何 Wildfly 模块?
此致, 菲利普
除了 Tika 将大量有问题的依赖项以及大量非常不受欢迎的传递依赖项转储到您的运行时类路径中这一事实之外,您 运行 陷入了这个问题:
http://weld.cdi-spec.org/documentation/#4
https://issues.jboss.org/browse/CDI-377
基本上是CDI 1.1的不兼容问题,CDI 1.2已经解决了;在 Wildfly 中手动将 Weld 更新到版本 2.3.x 可能会完全解决问题。
除非进行手动升级,否则您可以通过声明具有以下内容的 META-INF/jboss-all.xml 文件来解决问题。假设你有一个war,精确的路径是webapp/META-INF/jboss-all.xml.
<jboss xmlns="urn:jboss:1.0">
<weld xmlns="urn:jboss:weld:1.0" require-bean-descriptor="true"/>
</jboss>
并确保在您自己需要 CDI 支持的模块中定义 WEB-INF/beans.xml 文件(同样:假设 war)。这会强制 Weld 仅尝试配置包含 beans.xml 文件的模块,而 CXF 不会。
除此之外,我将真正调查依赖树并查看通过 Tika 引入的内容;例如,您会发现 javax.inject API 被放在编译范围内,因此与您的应用程序一起部署,这是您真正不想要的。
如果有人还在寻找这个,您可以将这行添加到您的 pom.xml:
<dependency>
<groupId>org.apache.tika</groupId>
<artifactId>tika-parsers</artifactId>
<version>1.13</version>
<exclusions>
<exclusion>
<groupId>org.apache.cxf</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency>