У нас есть решение, в котором наши проекты пользовательского интерфейса включают довольно много бизнес-сервисов с использованием клиентских зависимостей EJB. Проблема с этим в Maven заключается в том, что хотя клиентский.jar обычно содержит около 1 -2 классов, они несут с собой полный стек зависимостей всего приложения-службы. Это может стать немного уродливым, когда файлы.ear начинают расти до 50 -100 МБ за раз и время от времени появляются надоедливые ошибки из-за нерелевантных зависимостей, проникающих в приложение пользовательского интерфейса.
Конечно, мы всегда можем исключить зависимости на стороне клиента, но тогда нам придется писать одну и ту же кучу строк в каждый клиентский проект, использующий эти сервисы, а это много ненужного повторения. Кроме того, люди придумывают самые странные сообщения об ошибках и тратят много времени на их отслеживание, прежде чем вспомнить, что они включили какой-то клиентский jar и не проверили, какие дополнительные зависимости он добавил в уравнение.
Пример:
<dependency>
<groupId>fi.path.to.service</groupId>
<artifactId>customermanagement-common</artifactId>
<version>2.6</version>
</dependency>
<dependency>
<groupId>fi.path.to.service</groupId>
<artifactId>customermanagement-service</artifactId>
<classifier>client</classifier>
<exclusions>
<exclusion>
<groupId>fi.path.to.dependency</groupId>
<artifactId>internal-dependency-#1</artifactId>
</exclusion>
<exclusion>
<groupId>org.codehaus.castor</groupId>
<artifactId>castor</artifactId>
</exclusion>
<exclusion>
<groupId>fi.path.to.dependency</groupId>
<artifactId>internal-dependency-#2</artifactId>
</exclusion>
<exclusion>
<artifactId>internal-dependency-#3</artifactId>
<groupId>fi.path.to.dependency</groupId>
</exclusion>
<exclusion>
<artifactId>internal-dependency-#4</artifactId>
<groupId>fi.path.to.dependency</groupId>
</exclusion>
<exclusion>
<artifactId>internal-dependency-#5</artifactId>
<groupId>fi.path.to.dependency</groupId>
</exclusion>
<exclusion>
<artifactId>castor-xml</artifactId>
<groupId>org.codehaus.castor</groupId>
</exclusion>
<exclusion>
<artifactId>castor-codegen</artifactId>
<groupId>org.codehaus.castor</groupId>
</exclusion>
<exclusion>
<artifactId>castor-xml-schema</artifactId>
<groupId>org.codehaus.castor</groupId>
</exclusion>
<exclusion>
<artifactId>internal-dependency-#6</artifactId>
<groupId>fi.path.to.dependency</groupId>
</exclusion>
</exclusions>
<version>2.6</version>
</dependency>
Включен только один сервисный клиент,представьте, что у вас есть несколько из них в нескольких разных приложениях, и вы получите картину: каждый раз записывать все исключения довольно раздражает, а POM проекта становятся довольно длинными.
Я бы пометил зависимость как предоставленную, но есть пара зависимостей, которые аварийно завершают работу во время выполнения, если они не существуют. Скажем, те, которые включают вызов другой службы еще одному приложению с внешним классом Exception, который по той или иной причине не заключен в проект службы и вызовет исключение ClassNotFoundException во время выполнения, если его нет.
Поэтому я знаю, что можно исключить/включить классы из ejb-клиента во время его генерации с помощью спецификаций pom.xml в плагине maven -ejb -, но есть ли способ также исключить зависимости?