【问题标题】:Flyway can not find resources in weblogic Java EE 7 deploymentFlyway 在 weblogic Java EE 7 部署中找不到资源
【发布时间】:2016-01-23 22:43:53
【问题描述】:

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

我正在使用带有 java 8 update 65 的 Weblogic 12.2.2.1(至少这个来自一个干净的安装程序)。

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

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

我是否可以期待其他第三方库在未来搜索一些资源时也会遇到同样的问题?

作为一种解决方法,我将脚本移到了 war 文件中,是否有更简洁的解决方案?

附加说明,我尝试了分阶段和非分阶段部署。

【问题讨论】:

    标签: jakarta-ee weblogic weblogic12c flyway


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-29
      • 1970-01-01
      • 2023-01-28
      • 1970-01-01
      • 1970-01-01
      • 2020-12-08
      • 2020-04-14
      • 1970-01-01
      相关资源
      最近更新 更多