Java JBoss收缩膜

Java JBoss收缩膜,java,jboss,integration-testing,jboss-arquillian,shrinkwrap,Java,Jboss,Integration Testing,Jboss Arquillian,Shrinkwrap,在观看JBoss的Arquillian视频教程时,我偶然发现了他们的另一个项目,叫做ShrinkWrap,因为Arquillian使用它 在他们的项目页面上花了一些时间之后,我似乎找不到一些问题的具体答案,而且这似乎是一个相当新的不成熟的项目,背后没有一个大型开发社区。具体而言: 收缩包装的目的是为了制造记忆罐、战争和耳朵吗?如果是,我为什么要这样做?如果不是,覆膜收缩的目的是什么?它解决了什么问题? ShrinkWrap是否涉及文件系统?JAR是在磁盘上创建的,还是在内存中100%创建的?如果

在观看JBoss的Arquillian视频教程时,我偶然发现了他们的另一个项目,叫做ShrinkWrap,因为Arquillian使用它

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

收缩包装的目的是为了制造记忆罐、战争和耳朵吗?如果是,我为什么要这样做?如果不是,覆膜收缩的目的是什么?它解决了什么问题? ShrinkWrap是否涉及文件系统?JAR是在磁盘上创建的,还是在内存中100%创建的?如果不是,那么内存中存档的价值是什么?
提前谢谢

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

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


这个项目看起来不成熟,但事实并非如此。开发非常活跃,社区非常广泛,人们不仅来自JBoss世界,而且来自所有主要的应用服务器社区

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

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


这个项目看起来不成熟,但事实并非如此。开发非常活跃,社区非常广泛,人们不仅来自JBoss世界,而且来自所有主要的应用服务器社区

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

除非您愿意,否则包络处理不会接触文件系统。如果需要,包覆面提取可以使用以下代码在磁盘上轻松生成物理存档:

WebArchive war = getArtifact();
war.as(ZipExporter.class).exportTo(new File("/tmp/myartifact.war"));
您也可以做相反的事情,将物理归档文件从磁盘导入内存


Arquillian使用ShrinkWrap,但ShrinkWrap本身绝对不限于该用例,当然可以独立使用。例如,它可以用于VFS任务,甚至可以连接到现有的构建过程中,如中所述。

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

除非您愿意,否则包络处理不会接触文件系统。如果需要,包覆面提取可以使用以下代码在磁盘上轻松生成物理存档:

WebArchive war = getArtifact();
war.as(ZipExporter.class).exportTo(new File("/tmp/myartifact.war"));
您也可以做相反的事情,将物理归档文件从磁盘导入内存


Arquillian使用ShrinkWrap,但ShrinkWrap本身绝对不限于该用例,当然可以独立使用。例如,它可以用于VFS任务,甚至可以连接到现有的构建过程中,如中所述。

感谢@tair+1-快速跟进您的评论:当您不编写文件时,您不会编造愚蠢的临时JAR文件名。。。。我对集成测试不是很熟悉,所以这就是它的组成部分吗?选取几个相互依赖的类,将它们打包为class-1-and-class-2-integration_test.jar,而不是将所有类组合成my-inteller-app.jar,并部署它们以查看它们的行为?我知道集成测试涉及测试依赖项,但从来不知道它需要打包/部署。这是常见的做法吗?Arquillian的方法确实是将测试工件打包部署到容器中,并在容器中执行测试-这反过来使您在int-tests期间不必试图模仿容器环境。还有一些非常酷的使用包覆面收缩来测试依赖项兼容性。谢谢@tair+1-快速跟进您的评论:当您不编写文件时,您不会编造愚蠢的临时JAR文件名。。。。我不是
真正熟悉集成测试,那么它是由什么组成的呢?选取几个相互依赖的类,将它们打包为class-1-and-class-2-integration_test.jar,而不是将所有类组合成my-inteller-app.jar,并部署它们以查看它们的行为?我知道集成测试涉及测试依赖项,但从来不知道它需要打包/部署。这是常见的做法吗?Arquillian的方法确实是将测试工件打包部署到容器中,并在容器中执行测试-这反过来又使您在int-tests期间不必尝试模拟容器环境。此外,还可以使用包覆面处理来测试依赖性兼容性。