Как Maven обрабатывает WAR-зависимости во время компиляции? - PullRequest
3 голосов
/ 01 марта 2012

Я использую Maven 3 для обработки (большого) проекта. Этот проект определяет набор сервисов REST, используя Scala, Akka и платформу Spray. Каждый сервис определяется как независимый проект, создающий WAR благодаря команде «mvn package».

Мне нужно «собрать» эти разные сервисы в «систему», то есть подмножество этих сервисов, которые будут развернуты для определенной цели в одной WAR. Оверлей Maven WAR хорошо работает как первое впечатление: просто создайте новый проект и добавьте сервисы, которые будут включены в качестве зависимостей.

<dependencies>
  <dependency>
    <groupId>net.modelbased.sensapp.service</groupId>
    <artifactId>net.modelbased.sensapp.service.metamodel.repository</artifactId>
    <version>0.0.1</version>
    <type>war</type>
  </dependency>     
</dependencies>

Хорошо работает, и классы, содержащиеся в независимых сервисах, включены в окончательную WAR.

jar tf target/net.modelbased.sensapp.system.envision-0.0.1-SNAPSHOT.war 
[...]
WEB-INF/classes/net/modelbased/sensapp/service/metamodel/repository/ModelLister.class
[...]

Но ... Инфраструктура Spray требует реализации начальной загрузки, то есть класса, который загружает реализованные сервисы. Этот файл должен быть скомпилирован, так как это простой класс scala. Но похоже, что maven не включает зависимости WAR в путь к классам компиляции.

Я видел плагин WARpath (http://static.appfuse.org/maven-warpath-plugin/) ... Но он не выглядит более или менее устаревшим. Есть ли «стандартный» способ сделать то, что я хотел бы сделать (например, включить WAr в компиляцию путь к классу).

Ps. Одним из требований проекта является то, что каждый сервис ДОЛЖЕН быть развернут в качестве независимого артефакта. Решением может быть реализация ядра службы в виде проекта JAR, а также предоставление проекта WAR, который включает ссылку на JAR и связанный файл конфигурации. Но это умножит на 2 количество определенного проекта, что не является оптимальным способом ...

Ответы [ 2 ]

0 голосов
/ 13 апреля 2012

Вы можете использовать конфигурацию maven-war-plugin , которая предлагает вам способ создать отдельный файл jar из файлов из src / main / java. Вы должны добавить элементы конфигурации:

  <configuration>
    <archiveClasses>true</archiveClasses>
    <attachClasses>true</attachClasses>
  </configuration>

Это создаст отдельный файл jar с классификатором classes , который можно использовать как обычную зависимость.

0 голосов
/ 12 апреля 2012

Предлагаемое вами решение выглядит хорошо.

Вы можете построить банку из ваших классов, а затем построить войну, используя эту банку в качестве зависимости.

Вы, вероятно, также можете сделать этоодин проект, я не вижу необходимости в двух разных проектах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...