如何用 EAR 中附带的依赖项取代 Glassfish 内置库?

How to superseed Glassfish's built-in libraries with dependencies shipped in EAR?

GlassFish 4.1 在 glassfish/modules 中提供了 EclipseLink 2.5.x。我想在我的应用程序中使用 2.6.4,并在使用 maven-ear-plugin:2.10.1

打包时包含它
<configuration>
    <finalName>linuxtracker2</finalName>
    <version>7</version>
    <defaultLibBundleDir>lib</defaultLibBundleDir>
    <archive>
        <manifest>
            <addClasspath>true</addClasspath>
        </manifest>
    </archive>
</configuration>

以及 EJB 和 WAR 模块作为依赖项(否则为默认值)。应用程序部署并运行良好,但我怀疑 EclipseLink 2.5 有问题,我还是想覆盖它,因为我不想(双重)配置服务器以提供依赖项。

到目前为止我发现 GlassFish has a classloader hierarchy and that load requests are delegated to the topmost parent which can satisfy it, but the docs fail of course to explain how to use that. There's Circumventing Class Loader Isolation 我想说的与我想要实现的相反(隔离 class 加载程序以使用我打包的依赖项)。

我的应用程序设置是标准的:实体 classes 和 EJB 接口、EJB 实现、Web 前端和 EAR maven 模块。

相关问题:

GlassFish 不再受 Oracle 支持,因此现在只是一个开源项目。可以在 https://glassfish.java.net/documentation.html 找到文档 - 您需要下载 "Administration Guide" PDF,尽管其他的也很有用。

您在此处尝试执行的操作在 GlassFish 中是不可能的,但它是添加到 Payara Server 的一项功能,它派生自 GlassFish(免责声明: 我为他们)。

对于 EAR 文件,Payara Server 添加了在您的 META-INF/glassfish-application.xml 文件中添加 <classloading-delegate>false</classloading-delegate> 的选项。当您将自己的版本打包到 EAR 中时,这应该会停止您的应用程序使用来自 Payara Server 的库。

不过,对于您的特定用例,您不需要使用它,因为 Payara Server already comes with EclipseLink 2.6.4 in the latest build, 171.1