Qual é a diferença entre o escopo do maven compile
e provided
quando o artefato é construído como um JAR? Se fosse WAR, eu entenderia - o artefato seria incluído ou não no WEB-INF / lib. Mas no caso de um JAR, não importa - as dependências não estão incluídas. Eles precisam estar no caminho de classe quando seu escopo é compile
ou provided
. Eu sei que as provided
dependências não são transitivas - mas é apenas uma diferença?
260
JAR packaging
contexto. Maven doc não menciona sobre isso. Eu uso o Maven por um tempo, mas eu já me perguntei sobre isso :) Portanto, parece que, noJAR packaging
contexto, não há diferença entrecompile
eprovided
(exceto a transição de dependência). Estou certo?compile
e não serão se o escopo forprovided
.Aqui está a referência.
fonte
mvn exec:java
é executada, mas uma dependência compilada.Se você planeja gerar um único arquivo JAR com todas as suas dependências (o típico xxxx-all.jar), o escopo fornecido é importante, porque as classes nesse escopo não serão compactadas no JAR resultante.
Veja maven-assembly-plugin para mais informações
fonte
maven-assembly-plugin
, interessante que as respostas mais votadas não a mencionam.Disponibilize no caminho da classe, não adicione essa dependência no jar final, se for jar normal; mas adicione este jar ao jar se o jar final for um jar único (por exemplo, jar executável)
A dependência estará disponível no ambiente de tempo de execução; portanto, não inclua essa dependência em nenhum caso; mesmo que não em jar único (ou seja, jar executável etc)
fonte
Para um arquivo jar, a diferença está no caminho de classe listado no arquivo MANIFEST.MF incluído no jar, se addClassPath estiver definido como true na configuração do maven-jar-plugin. dependências 'compilar' aparecerão no manifesto, dependências 'fornecidas' não.
Uma das minhas irritações é que essas duas palavras devem ter o mesmo tempo. Compilado e fornecido, ou compilado e fornecido.
fonte
Quando você define o escopo do maven como
provided
, significa que, quando o plug-in for executado, a versão das dependências reais usada dependerá da versão do Apache Maven que você instalou.fonte
Se o arquivo jar for como o arquivo jar executável por boot de primavera, o escopo de todas as dependências deverá
compile
incluir todos os arquivos jar.Porém, se o arquivo jar for usado em outros pacotes ou aplicativos, ele não precisará incluir todas as dependências no arquivo jar, porque esses pacotes ou aplicativos podem fornecer outras dependências.
fonte