我使用OpenEJB为最终部署到WebSphere Application Server的应用程序运行单元测试。我的问题是(n不可避免)依赖于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.*?'
但仍在检查罐子的可加载模块:
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将绑定到,需要一个重新启动以重命名jar。)
排除这个罐子的正确方法是什么?
答案 0 :(得分:2)
您可能还需要将openejb.deployments.classpath.filter.descriptors
设置为true。见http://tomee.apache.org/application-discovery-via-the-classpath.html
否则,过滤器将不会应用于包含描述符文件的资源(ejb-jar.xml)。
如果您仍有问题,可以通过org.apache.openejb.config.DeploymentsResolves
进行调试,看看为什么您的资源不会被排除。