提问者:小点点

在Wildfly中,在我的WAR中包含JAR文件与通过jbost-部署结构链接到它之间有区别吗?xml?


我正在使用Wildfly 11和Java8。如果我部署两个具有相同库的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?也就是说,我是否因为类加载或任何类似的优势而减少了内存?


共1个答案

匿名用户

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

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

如果你有一个应用程序,你不能扩展一个特定框架/库的版本,你可以继续使用它,你可以使用同一个库的其他版本的其他应用程序。我知道当你把你的jar嵌入到你的应用程序中时,你可以达到同样的目的,但是你必须在你所有的应用程序中做同样的事情,对于JBoss模块,你只需要声明你的依赖关系,你的应用程序将会更加轻量级。

在JBoss模块中,您配置的每个jar都是一个模块,每个模块都有自己的类加载器(模块化类加载器),每个类加载器都确切地知道它必须加载哪些类(以及它的依赖项,如果适用的话),而不是加载所有类的平面类加载器(分层)。这种架构使JBoss模块更快(基本上是因为它是一种新的方式来做它的祖先,JDK类加载器的同样的事情)。

在此链接中,您可以查看更具体的JBoss模块指南,该指南解释了更多概念,并且肯定有更好的解释。

在这个链接中,你可以找到一个简短的评论和一对例子。

希望这有帮助。