Я пытаюсь добавить пакет org.jibble.pircbot в свой тестовый архив, используя shrinkwrap. Я пробовал все варианты, о которых я могу думать, но во всех случаях пакет не найден. Однако по какой-то причине классы могут добавляться отдельно, но любые анонимные внутренние классы не добавляются.Сложность добавления пакета в архив Shrinkwrap в тесте Arquillian
@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)
...
Это странно, потому что просмотр исходного Shrinkwrap код, который я нашел функцию, которая делает следующее утверждение
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
...
Я использую Gradle, но если я использую Maven, то специалист распознаватель будет вероятно, выполняет эту работу. Там есть градильщик, но это не совсем то же самое. Моя лучшая попытка использовать его следующим образом
return ShrinkWrap.create(EmbeddedGradleImporter.class)
.forProjectDirectory()
.forTasks("integTestWar")
.importBuildOutput("build/libs/integTest.war").as(WebArchive.class);
Это пинает Gradle задачу и вставляет тестовые классы в архив. Задача заключалась в том, чтобы получить град, чтобы создать правильный военный файл. Я хотел, чтобы он содержал файлы ресурсов (дескрипторы развертывания и т. Д.), Принадлежащие исходному набору тестов интеграции, а не основной источник, но я просто не мог заставить его работать.
FYI Я использую термоусадочную версию 1.2.3, которая является последней.
Любая помощь будет высоко оценена.
Что происходит, когда вы разархивируете свой? Я могу вспомнить аналогичную проблему, когда groovy-all.jar не был должным образом включен из-за отсутствия записей в каталоге. https://issues.apache.org/jira/browse/GROOVY-6158 –