Я новичок в инструменте maven, я создал проект с Spring и Hibernate, и они настроены в pom.xml как плагины, но JUnit помечен как зависимость. Мой вопрос в том, какова логика одного как плагина, а другого как зависимости?
источник
Я новичок в инструменте maven, я создал проект с Spring и Hibernate, и они настроены в pom.xml как плагины, но JUnit помечен как зависимость. Мой вопрос в том, какова логика одного как плагина, а другого как зависимости?
И плагины, и зависимости представляют собой файлы Jar.
Но разница между ними в том, что большая часть работы в maven выполняется с использованием плагинов; тогда как зависимость - это просто файл Jar, который будет добавлен в путь к классам при выполнении задач.
Например, вы используете плагин компилятора для компиляции файлов java. Вы не можете использовать плагин компилятора в качестве зависимости, поскольку это только добавит плагин в путь к классам и не вызовет компиляцию. Файлы Jar, которые будут добавлены в путь к классам при компиляции файла, будут указаны как зависимость.
То же самое и с вашим сценарием. Вы должны использовать spring-plugin для выполнения некоторых исполняемых файлов spring [я не уверен, для чего используются Spring-plugin. Я здесь просто догадываюсь]. Но вам нужны зависимости для выполнения этих исполняемых файлов. А Junit помечен как зависимый, поскольку он используется плагином surefire для выполнения модульных тестов.
Итак, мы можем сказать, что плагин - это файл Jar, который выполняет задачу, а зависимость - это Jar, который предоставляет файлы классов для выполнения задачи.
Надеюсь это ответит на твой вопрос!
Сам Maven можно охарактеризовать как кухонный комбайн, который имеет множество различных устройств, которые можно использовать для выполнения различных задач. Эти модули называются плагинами. Например, maven использует для компиляции вашего проекта
maven-compiler-plugin
, запуска тестовmaven-surefire-plugin
и так далее.Зависимость с точки зрения maven - это пакет классов, от которых зависит ваш проект. Это может быть jar, war и т. Д. Например, если вы хотите написать тест JUnit, вам придется использовать аннотации и классы JUnit, поэтому вы должны объявить, что ваш проект зависит от JUnit.
источник
Плагины и зависимости - это разные вещи, и они дополняют друг друга.
Какие есть плагины?
Плагины выполняют задачи для сборки Maven. Они не упакованы в приложение.
Это сердце Maven.
Любая задача, выполняемая Maven, выполняется плагинами .
Есть две категории плагинов: и плагины :
build
reporting
<build/>
элементе из POM.<reporting/
элементе> из POM.В соответствии с целью maven, указанной в командной строке (например
mvn clean
,mvn clean package
илиmvn site
), будет использоваться определенный жизненный цикл и будет выполняться определенный набор целей плагинов.Есть три встроенных сборки: жизненный цикл
default
,clean
иsite
.default
Жизненный цикл обрабатывает развертывания проекта, вclean
течение жизненного цикла проекта ручки очистки, в то времяsite
жизненного цикла управляет созданием документации сайта вашего проекта.Цель плагина может быть привязана к определенной фазе определенного жизненного цикла.
Например,
maven-compiler-plugin
связывается по умолчаниюcompile
цель на стадии жизненного цикла:compile
.Большинство плагинов maven (как базовые, так и сторонние плагины) предпочитают соглашение конфигурации. Таким образом, они обычно привязывают цель плагина к определенной фазе, чтобы упростить их использование.
Это более аккуратно и менее подвержено ошибкам:
чем:
Какие есть зависимости?
Зависимости - это артефакты / компоненты Maven, необходимые в пути к классам во время сборки Maven.
Они могут быть упакованы в приложение, но не обязательно (см.
scope
Ниже).Большинство зависимостей - это jar-файлы, но это могут быть и другие типы архивов: war, ear, test-jar, ejb-client ... или все еще POM или BOM.
В pom.xml, зависимости могут быть определены в нескольких местах: в
<build><dependencies>
части, вdependencies management
части или еще в видеplugin
декларации ! Действительно, некоторым плагинам может потребоваться наличие некоторых зависимостей в пути к классам во время их выполнения. Это нечасто, но такое бывает.Вот пример из документации, который показывает это
plugin
иdependency
может работать вместе:В Maven, зависимости упоминаются в формате конкретного:
groupId:artifactId:packaging:classifier:version
.Классификатор (необязательно) и упаковка (
JAR
по умолчанию) обычно не указываются. Таким образом, общий формат вdependency
декларации , а:groupId:artifactId:version
.Вот пример зависимости, объявленной в
<build><dependencies>
детали:В отличие от плагина, у зависимости есть область действия.
Область по умолчанию -
compile
. Это наиболее часто используемая область (опять же, конвенция важнее конфигурации).Область
compile
действия означает, что зависимость доступна во всех путях к классам проекта.Область видимости определяет, в какие пути к классам следует добавить зависимость. Например, нужно ли оно нам во время компиляции и выполнения или только для компиляции и выполнения тестов?
Например, мы ранее определили Hibernate как
compile
зависимость, поскольку он нам нужен повсюду: исходная компиляция, тестовая компиляция, время выполнения и так далее для ....Но мы не хотим, чтобы библиотеки тестирования могли быть упакованы в приложение или на них можно было ссылаться в исходном коде. . Итак, мы указываем
test
для них область применения:источник
webdriver-ie
у меня два варианта, либо включить его какplugins
илиdependency
, я включил оба для сравнения и заметил, что оба имеют точно такое же, сgroupId
той лишь разницей, чтоplugins
они поставлялись не с конкретной версией, аdependency
с ними0.6.685
. Не могли бы вы объяснить это в терминах непрофессионала (в отношении этого примера), в чем разница, какой из них использовать и когда. Любое предложение?pom.xml
. Но то, что должно вас заинтересовать, заключается в том, что указание версии зависимости является обязательным (в текущем pom или в родительском pom, если это унаследованная зависимость) в любой версии Maven, а с Maven 3 (вероятно, плохая хорошая идея в качестве функции), указывать версию плагина необязательно. Maven будет использовать последнюю версию, доступную в репозитории выпуска, в котором Maven ее находит. (1/2)Если вы работаете с фронтендом вроде меня и знакомы с Grunt и npm, подумайте об этом так:
Прежде всего будет работать, скажем,
npm install grunt-contrib-copy --save-dev
. Это похоже на maven<dependency></dependency>
. Он загружает файлы, необходимые для выполнения задачи сборки.Затем вы должны настроить задачу в Gruntfile.js
Это похоже на maven
<plugin>/<plugin>
. Вы указываете инструменту сборки, что делать с кодом, загруженным npm /<dependency></dependency>
.Конечно, это не точная аналогия, но достаточно близкая, чтобы помочь вам понять это.
источник
Плагины используются для добавления функций к
Maven
себе (например, для добавленияeclipse
поддержки илиSpringBoot
поддержки иMaven
т. Д.). Зависимости необходимы исходному коду для прохождения любой фазы Maven (compile
или,test
например). В случае,JUnit
если тестовый код в основном является частью вашей базы кода, и вы вызываетеJUnit
определенные команды внутри тестовых наборов, и эти команды не предоставляются,Java SDK
поэтомуJUnit
должны присутствовать в то время, когдаMaven
находится на этапе тестирования, и это обрабатывается путем упоминанияJUnit
как зависимости в вашемpom.xml
файле.источник
По сути, Maven - это среда выполнения плагинов - согласно формальному и стандартному компактному определению. Чтобы было понятнее, команды, которые вы используете, например,
maven-install/clean/compile/build etc
для создания / выполнения jar-файлов, которые мы иногда тоже запускаем вручную. Итак, вещи, которые вы хотите запустить (или настроить или выполнить), вы в основном помещаете в тег зависимости mavens pom и отвечаете на то, кто будет запускать эти зависимости (необходимые для настройки среды), как плагины.источник
Однострочный ответ - базовое понимание
Плагин - это инструмент, который вы используете при выполнении сборки maven.
Зависимость означает вид любой библиотеки, которую вы будете использовать в своем коде.
источник
Плагин - это расширение Maven, что-то, что используется для создания вашего артефакта (maven-jar-plugin для примера, как вы догадываетесь, используется для создания баночки из ваших скомпилированных классов и ресурсов).
Зависимость - это библиотека, которая требуется приложению, которое вы создаете, во время компиляции и / или тестирования и / или времени выполнения.
источник