在 Wildfly 中,在 WAR 中包含 JAR 文件与通过 jboss-deployment-struction.xml 链接到它有区别吗?

2024-04-17

我正在使用 Wildfly 11 和 Java 8。如果我部署两个具有相同库的 WAR 文件

/WEB-INF/lib/javassist-3.18.1-GA.jar

像这样将这些库包含在 /WEB-INF/jboss-deployment-struct.xml 中有什么好处

<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2">
        <deployment>
                <dependencies>
            ...
                        <module name="org.javassist" />

而不是将 JAR 包含在我的 WAR 文件中?也就是说,我是否会由于类加载或任何类似的优势而减少内存?


我认为 JBoss 模块比内存或性能方面的任何优势(JBoss 模块声称它可以做到)更能利用模块的重用或同一模块的单独版本。

如果您检查文件系统中 JBoss 模块的结构,它会记住 Maven 存储库样式,这样您可以更轻松地查看可用的模块和版本,或者您可以使用与 JBoss AS 相同的工具检查依赖关系,例如 CLI 或Web 控制台。

如果您有一个应用程序并且无法扩展特定框架/库的版本,您可以保留它,并且您可以拥有具有同一库的其他版本的其他应用程序。我知道当您将 jar 嵌入到应用程序中时,您可以达到相同的效果,但是您必须在所有应用程序中执行相同的操作,使用 JBoss 模块,您只需声明依赖项,您的应用程序将更加轻量级。

在 JBoss 模块中,您配置的每个 jar 都是一个模块,每个模块都有自己的类加载器(模块化类加载器),并且每个类加载器确切地知道它必须加载哪些类(及其依赖项,如果适用),而不是平面类加载器(分层),加载所有类。这种架构使 JBoss 模块更快(主要是因为这是一种新的方法来完成其祖先 JDK 类加载器的相同操作)。

在这个链接中 https://jboss-modules.github.io/jboss-modules/manual/,您可以查看更具体的 JBoss 模块指南,它解释了更多概念,并且肯定有更好的解释。

在这个链接中 http://planet.jboss.org/post/modularized_java_with_jboss_modules,您可以找到简短的评论和一对示例。

希望这可以帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Wildfly 中,在 WAR 中包含 JAR 文件与通过 jboss-deployment-struction.xml 链接到它有区别吗? 的相关文章

随机推荐