Os plug-ins e as dependências são arquivos Jar.
Mas a diferença entre eles é que a maior parte do trabalho no maven é feita usando plug-ins; enquanto a dependência é apenas um arquivo Jar que será adicionado ao classpath durante a execução das tarefas.
Por exemplo, você usa um plugin do compilador para compilar os arquivos java. Você não pode usar o plug-in do compilador como uma dependência, pois isso apenas adicionará o plug-in ao caminho de classe e não acionará nenhuma compilação. Os arquivos Jar a serem adicionados ao classpath durante a compilação do arquivo serão especificados como uma dependência.
O mesmo acontece com o seu cenário. Você tem que usar o plugin do spring para executar alguns executáveis do spring [Não tenho certeza para que os plugins do spring são usados. Estou apenas dando um palpite aqui]. Mas você precisa de dependências para executar esses executáveis. E o Junit é marcado como dependência, pois é usado pelo surefire-plugin para executar testes de unidade.
Portanto, podemos dizer que o plugin é um arquivo Jar que executa a tarefa, e a dependência é um Jar que fornece os arquivos de classe para executar a tarefa.
Espero que isso responda à sua pergunta!
O próprio Maven pode ser descrito como um processador de alimentos que possui muitas unidades diferentes que podem ser usadas para realizar diferentes tarefas. Essas unidades são chamadas de plug-ins. Por exemplo, para compilar seu projeto, o maven usa
maven-compiler-plugin
, para executar testes -maven-surefire-plugin
e assim por diante.Dependência em termos de maven é um pacote de classes das quais seu projeto depende. Pode ser jar, war etc. Por exemplo, se você deseja escrever o teste JUnit, você terá que usar anotações e classes JUnit, portanto, você deve declarar que seu projeto depende do JUnit.
fonte
Plugins e dependências são coisas muito diferentes e complementares.
O que são plug-ins?
Os plug-ins realizam tarefas para uma construção Maven. Eles não estão incluídos no aplicativo.
Estes são o coração de Maven.
Qualquer tarefa executada pelo Maven é realizada por plug-ins .
Existem duas categorias de plug-ins: o
build
e osreporting
plug - ins :<build/>
elemento do POM.<reporting/
elemento> do POM.De acordo com o objetivo do maven especificado na linha de comando (por exemplo
mvn clean
,mvn clean package
oumvn site
), um estilo de vida específico será usado e um conjunto específico de objetivos de plug-ins será executado.Há três built-in ciclos de vida de compilação:
default
,clean
esite
. Odefault
ciclo de vida lida com a implantação do projeto, oclean
ciclo de vida lida com a limpeza do projeto, enquanto osite
ciclo de vida lida com a criação da documentação do site do seu projeto.Um objetivo de plugin pode estar ligado a uma fase específica de um ciclo de vida específico.
Por exemplo, os
maven-compiler-plugin
liga por defeito, ocompile
meta para a fase do ciclo de vida:compile
.A maioria dos plug-ins maven (plug-ins de núcleo e plug-ins de terceiros) favorecem a convenção em vez da configuração. Portanto, eles geralmente vinculam um objetivo do plugin a uma fase específica para tornar seu uso mais simples.
Isso é mais limpo e menos sujeito a erros:
do que :
Quais são as dependências?
Dependências são artefatos / componentes do Maven necessários no caminho de classe durante a construção do Maven.
Eles podem estar incluídos no aplicativo, mas não necessariamente (veja
scope
abaixo).A maioria das dependências são jar, mas também podem ser outros tipos de arquivos: war, ear, test-jar, ejb-client ... ou ainda POM ou BOM.
Em um pom.xml, as dependências podem ser especificadas em vários lugares: a
<build><dependencies>
parte, adependencies management
parte ou ainda em umaplugin
declaração ! Na verdade, alguns plug-ins podem precisar de algumas dependências no caminho de classe durante sua execução. Isso não é comum, mas pode acontecer.Aqui está um exemplo da documentação que mostra isso
plugin
edependency
pode funcionar em conjunto:No Maven, as dependências são referenciadas em um formato específico:
groupId:artifactId:packaging:classifier:version
.O classificador (que é opcional) e a embalagem (
JAR
por padrão) não são comumente especificados. Assim, o formato comum nadependency
declaração é bastante:groupId:artifactId:version
.Aqui está um exemplo de dependência declarada na
<build><dependencies>
parte:Ao contrário de um plugin, uma dependência tem um escopo.
O escopo padrão é
compile
. Esse é o escopo mais comumente necessário (convenção sobre configuração novamente).O
compile
escopo significa que a dependência está disponível em todos os caminhos de classe de um projeto.O escopo define em quais classpaths a dependência deve ser adicionada. Por exemplo, precisamos disso na compilação e tempo de execução, ou apenas para a compilação e execução de testes?
Por exemplo, definimos anteriormente o Hibernate como uma
compile
dependência, pois precisamos dele em todos os lugares: compilação de origem, compilação de teste, tempo de execução e assim por ....Mas não queremos que as bibliotecas de teste possam ser empacotadas no aplicativo ou referenciadas no código-fonte . Portanto, especificamos o
test
escopo para eles:fonte
webdriver-ie
tenho duas opções, ou incluí-lo comoplugins
oudependency
incluí ambos para comparar e observei que ambosgroupId
tinham exatamente o mesmo, a única diferença era queplugins
não vinham com uma versão específica, masdependency
vinham com0.6.685
. Você poderia explicar em termos leigos (em relação a este exemplo) qual é a diferença, qual usar quando. Alguma sugestão?pom.xml
. Mas algo que deve interessar a você é que especificar a versão da dependência é obrigatório (no pom atual ou no pom pai se for uma dependência herdada) em qualquer versão do Maven desde o Maven 3 (provavelmente uma ideia ruim e boa como recurso), especificar a versão do plugin é opcional. O Maven usará a última versão disponível no repositório de lançamento onde o Maven a encontrar. (1/2)Se você tem experiência em front-end como eu e está familiarizado com o Grunt e o npm, pense assim:
Primeiro você executaria, digamos
npm install grunt-contrib-copy --save-dev
,. Isso é como o maven<dependency></dependency>
. Ele baixa os arquivos necessários para executar uma tarefa de construção.Então você configuraria a tarefa em Gruntfile.js
Isso é como o maven
<plugin>/<plugin>
. Você está dizendo à ferramenta de construção o que fazer com o código baixado por npm /<dependency></dependency>
.Claro que esta não é uma analogia exata, mas é próxima o suficiente para ajudar a entender isso.
fonte
Plug-ins são usados para adicionar funcionalidades a
Maven
ele mesmo (como adicionareclipse
suporte ouSpringBoot
suporte aMaven
etc.). As dependências são necessárias para seu código-fonte para passar qualquer fase do Maven (compile
outest
por exemplo). No caso deJUnit
o código de teste ser basicamente parte de sua base de código e você chamarJUnit
comandos específicos dentro de suítes de teste e esses comandos não forem fornecidos pelo,Java SDK
portanto,JUnit
deve estar presente no momentoMaven
em que está em fase de teste e isso é tratado mencionandoJUnit
como uma dependência em seupom.xml
arquivo.fonte
Maven em seu coração é uma estrutura de execução de plug-in - de acordo com a definição compacta formal e padrão. Para deixar mais claro, os comandos que você usa
maven-install/clean/compile/build etc
para criar / executar jars, que às vezes também executamos manualmente. Então, as coisas que você deseja executar (ou configurar ou executar) você basicamente coloca na tag de dependência do mavens pom e a resposta para quem irá executar essas dependências (necessárias para a configuração do ambiente) serão os plugins.fonte
Resposta de uma linha - compreensão básica
Pluginéuma ferramenta que você usa na execução de sua compilação de maven
Dependência significa qualquer tipo de biblioteca que você usará em seu código
fonte
Um plugin é uma extensão do Maven, algo usado para produzir seu artefato (maven-jar-plugin por exemplo, é usado para, você adivinhar, fazer um jar com suas classes e recursos compilados).
Uma dependência é uma biblioteca necessária para o aplicativo que você está construindo, durante a compilação e / ou teste e / ou tempo de execução.
fonte