作为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模块?
此致 菲利普
答案 0 :(得分:1)
除了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文件来解决问题。假设你有战争,精确的路径是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文件(再次:假设一场战争)。这迫使Weld仅尝试配置具有beans.xml文件作为其一部分的模块,而CXF则不会。
除此之外,我将真正调查依赖树,看看通过Tika拉入的内容;例如,您会发现javax.inject API被放在编译范围内,因此部署在您的应用程序中,这是您真正不想要的。
答案 1 :(得分:0)
如果有人还在寻找这个,你可以将这些行添加到你的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>