Является ли система Maven "транзитивной", но "предоставлена" не?
Ссылка Maven POM указывает следующее:
при условии - это очень похоже на компиляцию, но указывает, что вы ожидаете JDK или контейнер, чтобы обеспечить его во время выполнения. Он доступен только на путь компиляции и тестирования, и не является транзитивным.
...
система - эта сфера аналогична предоставленной, за исключением того, что вы должны предоставить JAR, который содержит его в явном виде. Артефакт всегда доступный и не хранилище.
Теперь я преобразовал проект с большим количеством "системных" зависимостей в "предоставленный". Однако представляется, что системные зависимости транзитивны, что делает их очень не похожими на предоставленные, и теперь вызывает многие недостающие зависимости в моей сборке. Мой вопрос двоякий:
- Является ли системная область транзитивной? Если да, является ли ссылка Maven неправильной или неполной?
- Есть ли способ сделать переходные транзитивности, не упаковывая их в окончательную сборку?
Ответы
Ответ 1
Транзитные зависимости всегда будут частью сборки. Нет возможности указать ваше намеренное поведение.
Вопрос: почему проект, который должен быть включен в другие проекты (как вы заявили с намерением иметь транзитивные зависимости), сборку? Как правило, проект, который имеет WAR-сборку, не будет включаться в зависимость от других проектов (WAR-зависимости вообще не обеспечивают транзитных зависимостей, поскольку они предназначены только для WAR-наложений).
Если это сборка maven, это просто. Плагин сборки Maven "исключает" для фильтрации файлов, которые необходимо скопировать.
Если бы это был WAR-проект, вы могли бы исключить некоторые JAR из WAR с такими исключениями:
<plugin>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<packagingExcludes>WEB-INF/lib/*-[toExclude1]-*.jar,WEB-INF/lib/[toExclude2]*.jar</packagingExcludes>
</configuration>
</plugin>