Это то, что я хотел бы достичь:Базовое развертывание уха пакет в JBoss
- 1 ушного пакет: all.ear
- Ухо-пакет содержит две войны (A.war, B. война в корне уха)
- ухо-пакет содержит 1 самодельный банку C и много баночек третьих лиц (в соответствии с APP-INF \ Lib)
Этот пакет должен быть развернут на JBoss WildFly 8.2.1
Я использую плагин уха maven (maven-ear-plug-in, версия 2.10.1). Моя конфигурация в ПОМ выглядит следующим образом (это «parent'-проект, который объединяет в себе три других проектов):
<configuration>
<finalName>All</finalName>
<defaultLibBundleDir>APP-INF/lib</defaultLibBundleDir>
<includeLibInApplicationXml>true</includeLibInApplicationXml>
<version>6</version>
<displayName>All</displayName>
<modules>
<jarModule>
<groupId>project</groupId>
<artifactId>C</artifactId>
<bundleFileName>C.jar</bundleFileName>
<uri>APP-INF/lib/C.jar</uri>
<bundleDir>APP-INF/lib</bundleDir>
</jarModule>
<webModule>
<groupId>project</groupId>
<artifactId>A</artifactId>
<uri>A.war</uri>
<bundleFileName>A.war</bundleFileName>
<contextRoot>/a</contextRoot>
<bundleDir>/</bundleDir>
</webModule>
<webModule>
<groupId>project</groupId>
<artifactId>B</artifactId>
<uri>B.war</uri>
<bundleFileName>B.war</bundleFileName>
<contextRoot>/b</contextRoot>
<bundleDir>/</bundleDir>
</webModule>
</modules>
<archive>
<manifestEntries>
<Implementation-Version>1.0</Implementation-Version>
</manifestEntries>
</archive>
</configuration>
Мои META.INF/Application.xml файл уборные, как это:
<?xml version="1.0" encoding="UTF-8"?>
<application xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="6"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/application_6.xsd">
<display-name>All</display-name>
<initialize-in-order>true</initialize-in-order>
<module>
<java>APP-INF/lib/C.jar</java>
</module>
<module>
<web>
<web-uri>B.war</web-uri>
<context-root>b</context-root>
</web>
</module>
<module>
<web>
<web-uri>A.war</web-uri>
<context-root>a</context-root>
</web>
</module>
<library-directory>APP-INF/lib</library-directory>
</application>
Ухо пакет изготовлен. Все сторонние банки находятся под APP-INF/lib, но C.jar находится в корневом каталоге.
Я возился много и получил различные ошибки при попытке загрузить пакет на JBoss:
Caused by: org.jboss.as.server.deployment.DeploymentUnitProcessingException: JBAS016703: Module may not be a child of the EAR's library directory. Library directory: APP-INF/lib, module file name: APP-INF/lib/[SomeThirthPartyLib].jar"
Когда я поместил каждую библиотеку под корнем (не использовать APP-INF), я получил ClassNotFoundError для B.war (не может найти классы из C.jar).
Я уже пытался добавить теги jboss к плагину maven-ear-плагинов (конфигурации), но они не поддерживаются JBoss 8+.
Я хочу пакет .ear, который может быть развернут в JBoss и содержит 2 войны и 1 банку, на которые ссылаются обе войны.
Что мне не хватает? (конкретные настройки конфигурации манифеста для конкретных настроек pom.xml для настроек A, B или C? JBoss? ...?)
Что у вас внутри C.jar? Если это всего лишь утилита jar (только pojos внутри), ее следует поместить в папку lib .. и для этого не вставляйте C в качестве ушного модуля, это должно быть зависимость от войн. – mendieta
C ,jar содержит бизнес-объекты и объекты доступа к данным. Некоторые из них являются одиночными и имеют кеш. Вот почему у меня может быть только один экземпляр (иначе будет дублированный кеш). Это зависимость от обеих войн с предоставленной областью. –
Если у C.jar есть синглтоны и бизнес-объекты, тогда нормально находиться в корне уха .. почему вы пытаетесь поместить его в папку lib? Если вы развертываете A, B и C в корневом каталоге и все остальные банки в папке lib, то какая ошибка развертывания? – mendieta