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

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

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

将这些库包含在/WEB-INF/jboss-deployment-structure.xml中是否有任何优势

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

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

最佳答案 除了内存或性能方面的任何优势(JBoss模块声称它可以做到),我认为JBoss模块更多的是利用模块的重用或同一模块的单独版本.

如果你检查文件系统中JBoss模块的结构,它会记住maven存储库样式,这样你可以更容易地查看可用的模块和版本,或者你可以使用JBoss AS的相同工具,CLI或者CLI来检查依赖关系. Web控制台.

如果您有一个应用程序,并且无法扩展特定框架/库的版本,则可以继续使用它,并且您可以将其他应用程序与同一库的其他版本一起使用.我知道当你将你的jar嵌入你的应用程序时你可以达到同样的目的,但是你必须在所有的应用程序中做同样的事情,使用JBoss模块你只需声明你的依赖项,你的应用程序将更轻量级.

在JBoss模块中,您配置的每个jar都是一个模块,并且每个模块都有自己的类加载器(模块化类加载器),并且每个类加载器确切地知道它必须加载哪些类(以及它的依赖关系,如果适用),对于平面类加载器(分层),加载所有类.这种架构使JBoss模块更快(主要是因为它是一种新的方式来做它的祖先,JDK类加载器).

In this link,您可以查看更具体的JBoss模块指南,它解释了更多概念,并且肯定有更好的解释.

In this link,你可以找到简短的评论和一对例子.

希望这可以帮助.

点赞