【问题标题】:JBoss ShrinkWrapJBoss 收缩包装
【发布时间】:2012-06-28 17:18:07
【问题描述】:

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

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

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

提前致谢!

【问题讨论】:

    标签: java jboss integration-testing jboss-arquillian shrinkwrap


    【解决方案1】:

    传统的构建过程涉及将字节写入磁盘,然后应用服务器将其读入内存。如果您只想将您选择的应用程序服务器交给您的部署工件,那么这是一个不必要的步骤。应用程序服务器将工件视为字节流,字节是从磁盘还是内存提供的并不重要。使用 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 所示)。

    【讨论】:

      【解决方案2】:

      拥有内存中 JAR 的优点之一是您可以将其部署到远程 JBossAS 实例,甚至无需将其写入文件。不写文件的时候别编傻的temp JAR文件名,以后记得删掉等等。

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

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

      【讨论】:

      • 感谢@tair (+1) - 快速跟进您的评论:“当您不编写文件时,您不会编造愚蠢的临时 JAR 文件名...”。我对集成测试并不熟悉,那么它是由什么组成的?取几个相互依赖的类,将它们打包为class-1-and-class-2-integration_test.jar(而不是所有类组成,比如my-entire-app.jar)并部署它们以查看它们的行为?我知道集成测试涉及测试依赖项,但从不知道它需要打包/部署。这是常见的做法吗?
      • Arquillian 的方法确实是将您的测试工件打包部署到容器并在容器内执行测试——这反过来又使您免于在内部测试期间试图模仿容器环境。
      • ShrinkWrap 还有一些很酷的用法来测试依赖兼容性。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-06
      • 1970-01-01
      • 2021-02-03
      • 1970-01-01
      相关资源
      最近更新 更多