ShrinkWrapについて、その1

棚卸し3日目。Arquillianでテストアーカイブを作る際に欠かせないShrinkwrapフレームワーク。簡単なプロジェクトなら[1]の例のように指定してやればいいいんだけど、プロジェクトが複数に渡っていたり、複雑な依存関係のあるクラスのテストの場合は、テストアーカイブの作成自体が大変では意味がない。いくつか考慮すべきことがあるが、例えば再帰的なクラスの追加に関してはこんなFeature Requestが上がっているが今のところ動きはない様子。
一方、Mavenを利用したResolverはすでにあって、[2]のようにpom.xmlを読み込んで特定のクラスやパッケージやなんならdependency以下まるごとテストアーカイブに含めることができる。


[1] ShrinkWrapの例(全体については昔のエントリを参照のこと):

@RunWith(Arquillian.class)
public class MemberRegistrationTest {
   @Deployment
   public static Archive<?> createTestArchive() {
      return ShrinkWrap.create(WebArchive.class, "test.war")
            .addClasses(Member.class, MemberRegistration.class, Resources.class)
            .addAsResource("META-INF/persistence.xml", "META-INF/persistence.xml")
            .addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml");
   }
//以下略
}


[2] Maven Resolverの例(Andrewのブログから):

Maven.configureResolver().fromFile(“pom.xml”).resolve(“commons-collections:commons-collections”).withTransitivity().as(File.class);


大規模なプロジェクトで実際にどうするのが正しいのか、今後ShrinkWrapはどういう部分の解決を考えているのか、12月5日のJBoss 冬将軍で直接Andrew本人に聞いてみるつもり。