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

在Wildfly中,在我的WAR中包含JAR文件与通过jboss-deployment-structure.xml链接到JAR文件有什么区别吗?,deployment,java-8,wildfly,classloader,war,Deployment,Java 8,Wildfly,Classloader,War,我将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>

我将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?也就是说,我是否因为类加载或任何类似的优势而减少了内存?

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

如果您检查文件系统中JBoss模块的结构,它会记住maven repository样式,这样您可以更轻松地查看可用的模块和版本,或者您可以使用与JBoss相同的工具(如CLI或Web控制台)检查依赖项

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

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

,您可以查看更具体的JBoss模块指南,其中解释了更多的概念,当然有更好的解释

,你可以找到一篇简短的评论和两个例子


希望这能有所帮助。

这可能与您之前的问题有关,所以我要重复一遍,这是一个XY问题,您要求的是一个我们完全不知道的问题的解决方案。这里有很多用户可以帮助您,只要您能让他们清楚地知道发生了什么……是的,您总是可以创建自己的模块,并通过jboss-deployment-structure.xml文件定义其依赖关系来加载jar文件。@Abhijit,是的,但是这样做有性能优势吗,JVM内存影响和应用程序速度影响是什么?