shrinkwrapを使用してテストアーカイブにorg.jibble.pircbotパッケージを追加しようとしています。私は考えることのできるすべてのバリエーションを試しましたが、すべてのケースでパッケージが見つかりませんでした。ただし、何らかの理由でクラスを個別に追加することはできますが、匿名の内部クラスは追加されません。ArquillianテストでShrinkwrapアーカイブにパッケージを追加するのが難しい
@Deployment
public static WebArchive createDeployment() {
return ShrinkWrap.create(WebArchive.class, "RcCustomerTest.war")
// .addPackages(true, PircBot.class.getPackage())
// .addPackages(true, "org.jibble.pircbot")
.addClasses(PircBot.class,
ReplyConstants.class,
IrcException.class,
NickAlreadyInUseException.class,
InputThread.class,
OutputThread.class,
Queue.class)
.addClass(DccManager.class) // Inner classes not added!
.addPackages(true, "com.recursiveloop.webcommon")
.addPackages(true, "com.recursiveloop.jloop.core.irc")
.addAsResource("config.properties")
.addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml")
.addAsWebInfResource("jboss-web.xml", "jboss-web.xml")
.addAsWebInfResource("jboss-deployment-structure.xml", "jboss-deployment-structure.xml")
.addAsResource("persistence.xml", "META-INF/persistence.xml")
.setWebXML("web.xml");
}
これは、例外が発生
...
Caused by: java.lang.NoClassDefFoundError: org/jibble/pircbot/DccManager$1
at org.jibble.pircbot.PircBot.<init>(PircBot.java:3081)
...
シュリンクラップのソースコードを閲覧、私は
Assert.assertTrue("Adding a class should also add the anonymous inner classes",
getArchive().contains(expectedPathAnonymousInnerClass));
しかしが、悲しいことに、それはと思われる以下の主張を作る機能を見つけたので、これは奇妙です実際にこの関数を呼び出すテストケースはありません。
しかし、私がaddPackages(true、 "org.jibble.pircbot")を呼び出すと、シュリンクラップでパッケージが見つからないのはなぜですか?私は、結果のアーカイブを見て、org.jibble.pircbotの兆候はありません、と明らかに避けられないClassDefNotFoundの例外があります。
...
Caused by: java.lang.NoClassDefFoundError: Failed to link com/recursiveloop/jloop/core/irc/VisitorConnection (Module "deployment.RcCustomerTest.war:main" from Service Module Loader): org/jibble/pircbot/PircBot
...
、Mavenのリゾルバを考え、私はGradleのを使用していますが、私はMavenを使用していた場合おそらく仕事をする。グラデルリゾルバがありますが、それは全く同じことをしません。
return ShrinkWrap.create(EmbeddedGradleImporter.class)
.forProjectDirectory()
.forTasks("integTestWar")
.importBuildOutput("build/libs/integTest.war").as(WebArchive.class);
これは、gradleタスクを開始し、結果のアーカイブにテストクラスを挿入します。問題は正しいwarファイルを作成するためにgradleを取得することでした。メインのソースセットではなく、統合テストのソースセットに属するリソースファイル(デプロイメント記述子など)を含めることを望みましたが、動作させることができませんでした。
FYI最新のshrinkwrapバージョン1.2.3を使用しています。
ご協力いただければ幸いです。
解凍したらどうなりますか? groovy-all.jarがディレクトリエントリが見つからないために正しく組み込まれていないという同様の問題を思い出すことができます。 https://issues.apache.org/jira/browse/GROOVY-6158 –