2015-10-23 1 views
1

У меня есть 2 войны (скажем, A и B) и 1 баночка (C).Как разделить зависимость (jar) между 2 войнами в JBoss

Оба A.war и B.w зависят от баночки С. Так как баночка С содержат синглтоны, может быть только 1 C, общий для A и B.

Я строй каждого развертывания с мавенна без каких-либо проблем , И ПОМ из А и В содержат:

<dependency> 
     <groupId>C</groupId> 
     <artifactId>C</artifactId> 
     <version>1.0</version> 
     <scope>provided</scope> 
    </dependency> 

Когда я пытаюсь добавить развертывания в JBoss (вручную, с помощью консоли управления), C и A не дают мне никаких проблем, но B бросает ошибки:

outcome 'failed', "JBAS014671: Failed services". 
StartException in service jboss.undertow.deployment.default-server.default-host./b: Failed to start service 
Caused by: java.lang.LinkageError: failed to link [class from B] (Module "B.war:main" from Service Module Loader) 
Caused by: java.lang.NoClassDefFoundError: [class from jar C] 
Caused by: java.lang.ClassNotFoundException: [class from jar C] from (Module "B.war:main" from Service Module Loader) 

Итак, в основном: JBoss не может разрешить зависимость от B.war до C.jar. Я уже добавил Maven войны-плагин для A и B и Maven-баночки-плагин для C.

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-war-plugin</artifactId> 
      <configuration> 
       <archive> 
        <manifest> 
         <addClasspath>true</addClasspath> 
        </manifest> 
        <manifestEntries> 
         <Dependencies>org.slf4j</Dependencies> 
        </manifestEntries> 
       </archive> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

Так в основном: Я хочу, чтобы общий проект (банку) C для A и B в JBoss , Я использую IntelliJ IDEA 14.1.5 и JBoss Wildfly 8.2.1. Lib для C нельзя добавить в A или B.

Что мне не хватает/не так? Как достичь этого?

ответ

1

Почему вы не можете включить файл jar в оба военных файла? В большинстве случаев это не хуже, чем использование общей банки.

Стандартный способ сделать это - упаковать как .war файлы, так и файл .jar в одно развертывание .ear. Таким образом, все они развертываются вместе.

В качестве альтернативы, если вы используете JBOSS AS 7.1+ или Wildfly, вы можете собрать банку в модуль и установить его на самом сервере.

+0

Сначала я сделал это, но C содержит одноэлементы с кешем, и это приведет к одновременному созданию двух кешей (один для A и один для B). Таким образом, может быть только один экземпляр C (также по памяти). Есть ли возможность сохранить URL-сопоставления в .ear-файлах? Потому что в будущем у меня будет другая фронтовая война в зависимости от C. (So 1 webservice, 2 front-end и одно ядро). Я посмотрю на модуль в jboss. –

Смежные вопросы