spring - WildFly:从 Wildfly 模块访问 war/lib 类
问题描述
我有创建spring模块和myApp.ear的wildfly,myApp.ear包含myApp.war,里面有WEB-INF/lib/commons-pool2-2.4.2.jar和WEB-INF/lib/myApp-core.jar myApp-core.jar 我有弹簧上下文,其中有:
<bean id="myAppPoolTargetSource" class="org.springframework.aop.target.CommonsPool2TargetSource">
<property name="targetBeanName" value="dataPostComponentTarget" />
<property name="maxSize" value="${POOL_POST_SIZE}" />
<property name="maxIdle" value="${POOL_POST_SIZE}"/>
<property name="minIdle" value="${POOL_POST_SIZE}"/>
</bean>
我有 jboss 部署描述符 jboss-deployment-structure.xml:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<jboss-deployment-structure>
<deployment>
<dependencies>
<module export="true" meta-inf="export" name="org.springframework.spring"/>
<module export="true" meta-inf="export" name="org.apache.cxf"/>
<module export="true" meta-inf="export" name="org.apache.cxf.impl"/>
<module export="true" name="javax.orb.api"/>
<module export="true" name="org.apache.commons.beanutils"/>
</dependencies>
<exclude-subsystems>
<subsystem name="logging"/>
</exclude-subsystems>
</deployment>
</jboss-deployment-structure>
我还在wildfly中为spring创建了模块,它是module.xml:
<?xml version='1.0' encoding='UTF-8'?>
<module xmlns="urn:jboss:module:1.5" name="org.springframework.spring">
<resources>
<resource-root path="spring-beans-4.3.14.RELEASE.jar"/>
<resource-root path="spring-core-4.3.14.RELEASE.jar"/>
<resource-root path="spring-aop-4.3.14.RELEASE.jar"/>
<resource-root path="spring-expression-4.3.14.RELEASE.jar"/>
<resource-root path="spring-web-4.3.14.RELEASE.jar"/>
<resource-root path="spring-webmvc-4.3.14.RELEASE.jar"/>
<resource-root path="spring-jms-4.3.14.RELEASE.jar"/>
<resource-root path="spring-messaging-4.3.14.RELEASE.jar"/>
<resource-root path="spring-tx-4.3.14.RELEASE.jar"/>
<resource-root path="spring-context-4.3.14.RELEASE.jar"/>
<resource-root path="spring-context-support-4.3.14.RELEASE.jar"/>
<resource-root path="spring-oxm-4.3.14.RELEASE.jar"/>
</resources>
<dependencies>
<module name="org.apache.commons.logging"/>
<module name="org.jboss.vfs" />
<module name="org.jboss.msc" />
<module name="javaee.api"/>
</dependencies>
</module>
对于我的另一只耳朵来说,它是完美的,但对于这个来说它是失败的:
Caused by: java.lang.NoClassDefFoundError: Failed to link org/springframework/aop/target/CommonsPool2TargetSource (Module "org.springframework.spring" from local module loader @51931956 (finder: local module finder @2b4a2ec7 (roots: C:\wildfly-11.0.0.Final\modules,C:\wildfly-11.0.0.Final\modules\system\layers\base))): org/apache/commons/pool2/PooledObjectFactory
原因完全清楚 spring 模块类加载器看不到 myApp.war/lib 中的类,但我怎样才能让它们可见?为了使模块对其他部署可见,我可以在依赖项中添加“export = true”,但它如何在不同的方向上产生?
更新
我试图将池库 jar 移动到 .ear/lib 并设置
<ear-subdeployments-isolated>false</ear-subdeployments-isolated>
在部署描述符中,但没有效果
解决方案
池库需要成为模块的一部分。将org.springframework.spring
无法在您的部署中看到库。您可以将commons-pool2-2.4.2.jar
库添加到org.springframework.spring
或创建一个新模块并让该org.springframework.spring
模块依赖它。
推荐阅读
- spring-boot - Spring Boot SSL webapp iOS 测试
- reactjs - 使用 React.js 处理 API 滞后
- sql - 如何比较具有相似数据的 2 列(例如,不同的顺序,用逗号)
- java - 如何模拟传递给构造函数的参数
- python - 使用 SWIG 将 C++ 类导出为 Python,导入模块后出现未定义符号错误
- azure - 如何:在 Azure DevOps YAML 中转义 $(var)
- java - 如何在 Intellij 的运行时类路径中包含目录
- javascript - 根据 browserslist 配置检查 JS 文件?
- python - 如何用n个字符填充字符串以使其在Python中具有一定的长度
- wordpress - 使用 Let's encrypt 设置 wordpress 时出错,Docker 上的 Nginx