Подтвердить что ты не робот

Является ли система Maven "транзитивной", но "предоставлена" не?

Ссылка Maven POM указывает следующее:

при условии - это очень похоже на компиляцию, но указывает, что вы ожидаете JDK или контейнер, чтобы обеспечить его во время выполнения. Он доступен только на путь компиляции и тестирования, и не является транзитивным.

...

система - эта сфера аналогична предоставленной, за исключением того, что вы должны предоставить JAR, который содержит его в явном виде. Артефакт всегда доступный и не хранилище.

Теперь я преобразовал проект с большим количеством "системных" зависимостей в "предоставленный". Однако представляется, что системные зависимости транзитивны, что делает их очень не похожими на предоставленные, и теперь вызывает многие недостающие зависимости в моей сборке. Мой вопрос двоякий:

  • Является ли системная область транзитивной? Если да, является ли ссылка Maven неправильной или неполной?
  • Есть ли способ сделать переходные транзитивности, не упаковывая их в окончательную сборку?
4b9b3361

Ответ 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>