我使用 OpenEJB 为最终部署到 WebSphere Application Server 的应用程序运行单元测试。我的问题是对 WAS 运行时 jar 的(不可避免的)依赖。我已经向 exclude 属性添加了一个表达式(我也尝试了物理路径):
p.put("openejb.deployments.classpath.exclude", ".*?runtime-6.1.*?");
// p.put("openejb.deployments.classpath.exclude", "C:/Users/user/.m3/repository/was/runtime/6.1/runtime-6.1.jar");
p.put("openejb.exclude-include.order", "include-exclude");
此值在日志中得到确认:
OpenEJB.options-2014-08-07-main--INFO -OpenEJB.options:Using 'openejb.exclude-include.order=include-exclude'
OpenEJB.options-2014-08-07-main--INFO -OpenEJB.options:Using 'openejb.deployments.classpath.include=.*eed-jar.*'
OpenEJB.options-2014-08-07-main--INFO -OpenEJB.options:Using 'openejb.deployments.classpath.exclude=.*?runtime-6.1.*?'
但 jar 仍在检查可加载模块:
OpenEJB.startup.config-2014-08-07-main--INFO -OpenEJB.startup.config:Found EjbModule in classpath: C:\Users\user\.m3\repository\was\runtime\6.1\runtime-6.1.jar
结果是 OpenEJB 启动失败:
org.apache.openejb.OpenEjbContainer$InvalidApplicationException: org.apache.openejb.config.ValidationFailedException: Module failed validation. AppModule(name=)
和
WARNING: can't load com.ibm.ws.management.j2ee.ManagementBean
org.apache.openejb.OpenEJBRuntimeException: Management
我一直在创建一个 0 长度的虚拟文件并重命名 runtime-6.1.jar
以在 Eclipse 中执行测试,但我需要恢复 jar 以运行 Maven 构建(Eclipse然后将绑定(bind)到,需要重新启动以重命名 jar)。
排除这个 jar 的正确方法是什么?
最佳答案
您可能还需要将 openejb.deployments.classpath.filter.descriptors
设置为 true。参见 http://tomee.apache.org/application-discovery-via-the-classpath.html
否则,过滤器将不会应用于包含描述 rune 件 (ejb-jar.xml) 的资源。
如果仍然有问题,您可以通过 org.apache.openejb.config.DeploymentsResolves
进行调试,看看为什么您的资源没有被排除。
关于OpenEJB:如何从模块搜索中排除 jar?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25187808/