1

在观看有关 JBoss 的 Arquillian 的一些视频教程时,我偶然发现了他们的另一个名为ShrinkWrap的项目(因为 Arquillian 使用它)。

在他们的项目页面上花了一些时间之后,我似乎无法找到一些问题的具体答案,而且这似乎是一个相当新的(不成熟的)项目,背后没有大型开发社区。具体来说:

  • ShrinkWrap 的目的是创建内存中的 JAR、WAR 和 EAR?如果是这样,我为什么要这样做?如果不是,ShrinkWrap 的目的是什么,它解决了什么问题?
  • ShrinkWrap 是否触及文件系统(JAR 实际上是在磁盘上创建的,还是真的 100% 在内存中)?如果不是,那么内存存档的价值是什么?

提前致谢!

4

2 回答 2

7

传统的构建过程涉及将字节写入磁盘,然后由应用程序服务器读入内存。如果您只想将您选择的应用程序服务器交给您的部署工件,那么这是一个不必要的步骤。应用程序服务器将工件视为字节流,字节是从磁盘还是内存提供的并不重要。使用 ShrinkWrap,您可以以编程方式构建工件,因此无需涉及单独的构建过程。

除非您愿意,否则 ShrinkWrap 不会触及文件系统。如果您愿意,ShrinkWrap 可以使用以下代码轻松地在磁盘上生成物理存档:

WebArchive war = getArtifact();
war.as(ZipExporter.class).exportTo(new File("/tmp/myartifact.war"));

您也可以做相反的事情,将物理档案从磁盘导入内存。

Arquillian 使用 ShrinkWrap,但 ShrinkWrap 本身绝对不限于该用例,当然可以根据需要独立使用。它可以用于例如 VFS 任务,甚至可以连接到现有的构建过程中(如http://blog.diabol.se/?p=122 所示)。

于 2012-09-12T15:07:08.530 回答
3

拥有内存 JAR 的优点之一是您可以将其部署到远程 JBossAS 实例,甚至无需将其写入文件。当你不写文件时,你不要编出愚蠢的临时 JAR 文件名,然后记得稍后删除它们,等等。

一般的一点是尽可能减少对构建环境的依赖和副作用。

该项目似乎不成熟,但事实并非如此。开发非常活跃,社区广泛,人们不仅来自 JBoss 世界,还来自所有主要的应用服务器社区!

于 2012-06-30T17:41:08.537 回答