当我启动 JBoss 6 时,我看到它从 tmp/vfs/automountXXX 文件夹中的 WEB-INF/lib 中解压所有 jar 文件。例如。 jackrabbit-server.war 包含库 asm-3.1.jar,然后在 tmp 文件夹中我看到以下包含文件的文件夹:
asm-3.1.jar-83dc35ead0d41d41/asm-3.1.jar
asm-3.1.jar-2a48f1c13ec7f25d/contents/"unpacked asm-3.1.jar"
它不从 my.ear/lib 中获取文件,只从 WEB-INF/lib 中获取...为什么会这样?有什么方法可以阻止它这样做吗?它只会减慢应用程序服务器的启动(和停止)速度,这在开发中不太舒服......顺便说一句。以这种方式重新打包 war 结构,给了我相同的工作应用程序,并在应用程序服务器启动时节省了 1 分钟...1 分钟就足够了...我希望有更简单的方法,无需在开发模式下重新打包。
如果它与 JavaEE 6 规范和 ejb-jars 有某种关系,现在可以位于 WEB-INF/lib 中,所以我的 war 文件中没有这样的库...
更新:实际上,当我将 jackrabbit-server.war 重新打包到包含 jackrabbit-server.war 的 jackrabbit-server.ear 并将其所有库移至 jackrabbit-server.ear/lib 时,我仍然在 tmp 中看到两个文件夹:
asm-3.1.jar-215a36131ebb088e/asm-3.1.jar
asm-3.1.jar-14695f157664f00/contents/
但在这种情况下,最后一个文件夹是空的。因此它仍然创建两个文件夹,但不会解压我的库。 我也使用exploded deployment所以问题只是关于jar文件,而不是解压ear/war。
最佳答案
它也会解压 EAR,只是不在同一个地方。你必须四处寻找它们被拆开的地方,但它们就在那里。
这样做是出于性能原因。如果没有,那么类加载将会非常慢,因为它必须通过嵌套 ZIP 文件递归查找它需要的内容。
因此,您可能会觉得拆包会减慢您的速度,但实际上它使事情变得更快。
关于java - JBoss 6 从 WEB-INF/lib of war 解压 jar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4601756/