如何在 EAR 项目中使用 wildfly 10 中的 httpcomponents?
How to use httpcomponents in wildfly 10 with EAR project?
我无法让 org.apache.httpcomponents 在 Wildfly 10 中工作。我没有尝试 9。我得到的错误基本上是。
Caused by: java.lang.ClassNotFoundException: org.apache.http.client.methods.HttpUriRequest from [Module "deployment.opca-ear.ear.opca-ejb.jar:main" from Service Module Loader]
at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:198)
at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:363)
at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:351)
at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:93)
... 185 more
我查看了 ,但 jboss-deployment-structure.xml
描述这里不起作用。
我尝试了 POM 文件中的各种组合,但我没有得到任何结果。
class 在构造时失败,因此导入语句导致问题。
我无法访问模块或获取部署到 ear lib 目录中所需的 jar 文件。
编辑:我正在使用 JBoss Developer Studio。我似乎在这方面取得了一些进展,如果我手动将我的 opca-ear.ear 文件复制到部署目录,然后部署 httpclient 和 httpcore jar,但如果我从 jbstudio 部署,它们不会,所以我想它是jboss-modules.jar
部署存在问题。无法从 jbstudio debug/deploy 会很痛苦。 Httpclient和httpcore在我的lib目录下的opca-ear.ear文件里,还有ejb/target/opca-ear/lib目录下。
如果我能得到类似 jboss-deployment-structure.xml
的东西,或者清单文件中的一个条目可以工作,以便 wildfly 为客户端提供对 org.apache.httpcomponents 资源的访问权限,那么我就不必担心jboss-modules.jar
.
解决方案:如已接受的答案所述,jboss-deployment-structure.xml
仅适用于 "full" 部署,因此我使用了 manifest.mf 条目
Dependencies: org.apache.httpcomponents
并更新了 maven-ejb-plugin 以使用它:
<artifactId>maven-ejb-plugin</artifactId>
<version>2.5.1</version>
<configuration>
<!-- Tell Maven we are using EJB 3.1 -->
<ejbVersion>3.1</ejbVersion>
<archive>
<manifestFile>${basedir}/src/main/resources/META-INF/manifest.mf</manifestFile>
</archive>
</configuration>
这完全取决于哪个代码需要它。如果您不声明 'full' 应用程序,您提到的 jboss-部署-structure.xml 将无法工作。
也许您应该在需要它的 jar/war 中添加一个包含条目 Dependencies: org.apache.httpcomponents 的清单。
看看 https://docs.jboss.org/author/display/WFLY10/Class+Loading+in+WildFly
我无法让 org.apache.httpcomponents 在 Wildfly 10 中工作。我没有尝试 9。我得到的错误基本上是。
Caused by: java.lang.ClassNotFoundException: org.apache.http.client.methods.HttpUriRequest from [Module "deployment.opca-ear.ear.opca-ejb.jar:main" from Service Module Loader]
at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:198)
at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:363)
at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:351)
at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:93)
... 185 more
我查看了 ,但 jboss-deployment-structure.xml
描述这里不起作用。
我尝试了 POM 文件中的各种组合,但我没有得到任何结果。
class 在构造时失败,因此导入语句导致问题。
我无法访问模块或获取部署到 ear lib 目录中所需的 jar 文件。
编辑:我正在使用 JBoss Developer Studio。我似乎在这方面取得了一些进展,如果我手动将我的 opca-ear.ear 文件复制到部署目录,然后部署 httpclient 和 httpcore jar,但如果我从 jbstudio 部署,它们不会,所以我想它是jboss-modules.jar
部署存在问题。无法从 jbstudio debug/deploy 会很痛苦。 Httpclient和httpcore在我的lib目录下的opca-ear.ear文件里,还有ejb/target/opca-ear/lib目录下。
如果我能得到类似 jboss-deployment-structure.xml
的东西,或者清单文件中的一个条目可以工作,以便 wildfly 为客户端提供对 org.apache.httpcomponents 资源的访问权限,那么我就不必担心jboss-modules.jar
.
解决方案:如已接受的答案所述,jboss-deployment-structure.xml
仅适用于 "full" 部署,因此我使用了 manifest.mf 条目
Dependencies: org.apache.httpcomponents
并更新了 maven-ejb-plugin 以使用它:
<artifactId>maven-ejb-plugin</artifactId>
<version>2.5.1</version>
<configuration>
<!-- Tell Maven we are using EJB 3.1 -->
<ejbVersion>3.1</ejbVersion>
<archive>
<manifestFile>${basedir}/src/main/resources/META-INF/manifest.mf</manifestFile>
</archive>
</configuration>
这完全取决于哪个代码需要它。如果您不声明 'full' 应用程序,您提到的 jboss-部署-structure.xml 将无法工作。
也许您应该在需要它的 jar/war 中添加一个包含条目 Dependencies: org.apache.httpcomponents 的清单。
看看 https://docs.jboss.org/author/display/WFLY10/Class+Loading+in+WildFly