在 Wildfly 的战争部署期间无法访问 jar 中的类
Posted
技术标签:
【中文标题】在 Wildfly 的战争部署期间无法访问 jar 中的类【英文标题】:classes in jar are not accessible during war deployment in Wildfly 【发布时间】:2017-04-19 14:21:03 【问题描述】:我正在尝试将我的应用程序服务器从 JBoss4 迁移到 Wildfly 9。我的战争结构是
myWar.war
- WEB-INF
-lib
-jar1
-jar2
当我在 Wildfly 中部署这场战争时,无法访问这些 jar 中的类 (ClassNotFoundException)。
阅读更多关于 Wildfly 的内容后,我了解到 Wildfly 中的类加载发生了变化,需要在文件 jboss-deployment-structure.xml 或 Manifest.mf 中明确提及依赖项
我有点困惑,有 2 个问题 -
-
是否需要在
jboss-deployment-structure.xml 或 manifest.mf(作为里面的 jars
战争的库)?
如果是,如何准确指定 jars 的这种依赖关系?我尝试了一些通过 jar 名称/包提及依赖项的方法
jboss-deployment-structure.xml 等中的名称,但没有运气
(每次我缺少依赖项或模块未找到异常时,
等)
我还必须在 Wildfly 的模块目录下创建一个模块吗?但是这些 jar 是使用我的构建脚本动态创建并打包在 war 文件中的,所以我不能将 jar 放在 modules 文件夹(如quartz 或 mysql jar)下,因为它们不是静态的。
请帮忙。
【问题讨论】:
【参考方案1】:war 的 lib 文件夹中的 jars 不需要在 MANIFEST.MF 或 jboss-deployment-structure.xml 中声明。
这些文件用于声明 Wildfly 模块的依赖项(例如 jdbc 驱动程序、cxf 依赖项等)。
您确定您的 ClassNotFoundException 来自您的战争 lib 文件夹中包含的 jars 吗?你不需要做任何特别的事情来从你的战争的 lib 文件夹中加载类。
【讨论】:
我在使用 wildfly 时遇到了同样的问题,我将 Gson 作为依赖项【参考方案2】:Wildfly 9 确实需要一种特定方式的结构化网络存档。从战争结构来看,一切看起来都很好。重新检查战争结构是否符合 Widfly 9。正确的结构应该是这样的:
myWar.war
---WEB-INF
------- lib
---- Jar 1
---- Jar 2
-------- classes
---- Your classeses here
-------- web.xml
【讨论】:
以上是关于在 Wildfly 的战争部署期间无法访问 jar 中的类的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Wildfly (Jboss) 为 ws 端点访问 CXF jar
使用 ubuntu 终端在 Wildfly 10.0.0 中部署我的战争文件