Flyway无法在weblogic Java EE 7部署中找到资源

时间:2016-01-23 22:43:53

标签: java-ee weblogic weblogic12c flyway

在我提出问题之前,我最好说我正在使用没有管理员权限的公司笔记本电脑。我需要的大多数软件来自公司内部准备的旧软件包,其中包含有用和过时的软件,所以环境有点混乱,我的一个人在他的笔记本电脑上没有遇到同样的问题。

我正在使用Java 8更新65来使用Weblogic 12.2.2.1(至少这一个来自一个干净的安装程序)。

我有一个ear文件,在根级别包含一个带有一些资源的jar文件和一个带有Web应用程序和所有依赖项的war文件。该应用程序应该在Java EE 7环境中工作。当我在本地部署它时,我使用JDK工具检查了类路径,我只能看到基本的java和weblogic库,然后用类加载器分析工具检查了类路径,我看到了earfile根级别的jar被加载了by weblogic.utils.classloaders.ChangeAwareClassLoader,而war文件的所有内容都由weblogic.utils.classloaders.GenericClassLoader加载 这种分离会产生影响,因为在启动时,Flyway会尝试将迁移脚本作为类路径资源加载,但它会失败。我调试了它,我看到它从GenericClassLoader运行,并且类加载器无法看到这些资源。

我的第一个问题是为什么GenericClassLoader无法找到资源,它是否应该检查继承链中其他类加载器所拥有的资源? 但是,它更像是一个Weblogic问题,一个Flyway问题还是一个设置问题?

我可以期待其他第三方图书馆在搜索某些资源时遇到同样的问题吗?

作为一种解决方法,我将脚本移动到war文件,是否有更清晰的解决方案?

另外请注意,我尝试过分阶段和非分阶段部署。

1 个答案:

答案 0 :(得分:1)

如果没有其他配置,任何其他模块都无法访问EAR文件根目录中的普通jar文件,例如在Web模块中添加包含Class-Path条目的META-INF / MANIFEST.MF文件

更简单的替代方法是将资源jar放在EAR文件的lib目录中。此目录中的Jars自动对EAR中的所有其他模块可见:

myApp.ear
 \-META-INF
   \-application.xml
 \-myWebApp.war
 \-lib
   \-resources.jar