У меня возникла проблема согласования создания проекта для использования на сервере приложений и для использования в качестве автономного приложения.
Чтобы дать общий упрощенный контекст, скажем, у меня есть три проекта A, B, C.
Проект A зависит от проекта B, который зависит от проекта C.
Проект C имеет зависимость X, которая помечена как предоставленная, поскольку ожидалось, что она будет доступна в виде библиотеки JEE, скажем, на сервере приложений. то есть jms.jar.
Поэтому, если я выполняю сборку проекта A, я получаю все транзитивные зависимости, за исключением тех, которые помечены как предоставленные, как и ожидалось.
Теперь у меня есть новый сценарий развертывания, в котором Project A необходимо использовать в автономной среде, то есть вне сервера приложений.
Итак, теперь мне нужно, чтобы jms jar был зависимостью компиляции. Означает ли это, что я должен явно добавить зависимость компиляции для X в проекте A? Не нарушает ли это Закон Деметры, то есть не разговаривайте с незнакомцами, в том смысле, что Проект А не должен явно знать о Проекте С, а должен знать только о Проекте Б?
Это простой пример, но на самом деле у меня есть несколько зависимостей, которые были отмечены как предоставленные, но теперь они должны быть зависимы от компиляции или времени выполнения, поэтому они попадают в артефакт, созданный плагином сборки maven.
Это фундаментальная проблема с Maven или я неправильно использую инструменты?
Заранее спасибо за любое руководство.