В чем разница между областью maven compile
и тем, provided
когда артефакт создается как JAR? Если бы это была WAR, я бы понял - артефакт будет включен или нет в WEB-INF / lib. Но в случае JAR это не имеет значения - зависимости не включены. Они должны быть на пути к классам, когда их область действия compile
или provided
. Я знаю, что provided
зависимости не транзитивны - но это только одно различие?
260
JAR packaging
контексте. Maven Doc не упоминает об этом. Некоторое время я использую Maven, но я уже об этом спрашивал себя :) Так что, похоже, вJAR packaging
контексте нет никакой разницы междуcompile
иprovided
(кроме перехода зависимости). Я прав?compile
и не будет, если он естьprovided
.Вот ссылка.
источник
mvn exec:java
путь к классам при запуске, но скомпилированная зависимость есть.Если вы планируете сгенерировать один файл JAR со всеми его зависимостями (типичный xxxx-all.jar), тогда предоставленная область имеет значение, потому что классы внутри этой области не будут упакованы в результирующий JAR.
Смотрите maven-assembly-plugin для получения дополнительной информации
источник
maven-assembly-plugin
, интересно, что в большинстве голосов, о которых идет речь, это не упоминается.Сделайте доступным путь к классу, не добавляйте эту зависимость в последний jar, если это обычный jar; но добавьте этот jar в jar, если final jar - это один jar (например, исполняемый jar)
Зависимость будет доступна во время выполнения, поэтому ни в коем случае не добавляйте эту зависимость; даже не в одной банке (то есть исполняемой банке и т. д.)
источник
Для файла jar разница заключается в пути к классам, указанном в файле MANIFEST.MF, включенном в jar, если для addClassPath задано значение true в конфигурации maven-jar-plugin. зависимости 'compile' появятся в манифесте, зависимости 'условии' не будут.
Одна из моих любимых мозолей состоит в том, что эти два слова должны иметь одинаковое время. Либо скомпилирован и предоставлен, либо скомпилирован и предоставлен.
источник
Когда вы устанавливаете maven scope как
provided
, это означает, что при запуске плагина фактическая используемая версия зависимостей будет зависеть от установленной вами версии Apache Maven.источник
Если файл jar похож на исполняемый файл jar для весенней загрузки, тогда область действия всех зависимостей должна
compile
включать все файлы jar.Но если файл JAR используется в других пакетах или приложениях, то нет необходимости включать все зависимости в файл JAR, поскольку эти пакеты или приложения могут сами предоставлять другие зависимости.
источник