Ich versuche, das Paket org.jibble.pircbot zu meinem Test-Archiv mithilfe von Shrinkwrap hinzuzufügen. Ich habe jede Variation ausprobiert, die mir einfällt, aber in allen Fällen ist das Paket nicht gefunden. Aus irgendeinem Grund können die Klassen jedoch einzeln hinzugefügt werden, aber anonyme innere Klassen werden nicht hinzugefügt.Schwierigkeit Hinzufügen von Paket zu Shrinkwrap-Archiv in Arquillian Test
@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");
}
Daraus ergibt sich die Ausnahme
...
Caused by: java.lang.NoClassDefFoundError: org/jibble/pircbot/DccManager$1
at org.jibble.pircbot.PircBot.<init>(PircBot.java:3081)
...
Das ist seltsam, weil das Surfen im Code shrinkwrap Quelle ich eine Funktion gefunden, die die folgende Behauptung
Assert.assertTrue("Adding a class should also add the anonymous inner classes",
getArchive().contains(expectedPathAnonymousInnerClass));
Aber leider macht, scheint es, dass Tatsächlich rufen keine Testfälle diese Funktion auf.
Die Frage bleibt jedoch - warum nicht Shrinkwrap das Paket finden, wenn ich addPackages aufrufen (true, "org.jibble.pircbot")? Ich schaue auf das resultierende Archiv und es gibt kein Zeichen von org.jibble.pircbot, und natürlich gibt es die unvermeidlichen ClassDefNotFound Ausnahmen:
...
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
...
ich gradle bin mit, aber wenn ich wurde mit Maven, die Maven-Resolver würde wahrscheinlich die Arbeit machen. Es gibt einen Gradel-Resolver, aber es macht nicht dasselbe. Mein bester Versuch es mit sich wie folgt
return ShrinkWrap.create(EmbeddedGradleImporter.class)
.forProjectDirectory()
.forTasks("integTestWar")
.importBuildOutput("build/libs/integTest.war").as(WebArchive.class);
Dies tritt weg eine gradle Aufgabe und fügt die Testklassen in das resultierende Archiv. Die Herausforderung bestand darin, eine korrekte War-Datei zu erstellen. Ich wollte, dass es die Ressourcendateien (Deployment-Deskriptor usw.) enthält, die zum Integrationstest-Quellsatz gehören, nicht das Hauptquellset, aber ich konnte es einfach nicht zum Laufen bringen.
FYI Ich verwende Shrinkwrap Version 1.2.3, die die neueste ist.
Jede Hilfe würde sehr geschätzt werden.
Was passiert, wenn Sie Ihre entpacken? Ich kann mich an ein ähnliches Problem erinnern, bei dem groovy-all.jar aufgrund fehlender Verzeichniseinträge nicht richtig eingebunden wurde. https://issues.apache.org/jira/browse/GROOVY-6158 –