Existe uma maneira simples de remover dependências não utilizadas de um maven pom.xml?

277

Eu tenho um grande projeto Maven com muitos módulos e muitos pom.xmlarquivos. O projeto mudou e suspeito que os poms contenham algumas dependências desnecessárias. Existe um comando que remove quaisquer dependências não utilizadas de um pom?

calça
fonte
2
Se você estiver usando o IntelliJ, consulte o seguinte: jonnyzzz.com/blog/2013/05/13/… Em caso de link morto: plugin Jonnyzzz Dependencies
Benj
3
@ Benj Tentei usar este plugin jonnyzz, e foi inútil. Na maioria das vezes, não encontra dependências não utilizadas e, às vezes, quando remove, remove as dependências do caminho da classe e não do arquivo build.gradle. Não consigo nem encontrar o documento adequado para explicar como esse plug-in realmente funciona.
vaibhav.g
@ vaibhav.g obrigado pela atualização. Parece que as coisas mudaram desde 2016 na época.
21419 Benj

Respostas:

222

O Plugin de Dependência do Maven ajudará, especialmente o dependency:analyzeobjetivo:

dependency:analyzeanalisa as dependências desse projeto e determina quais são: usadas e declaradas; usado e não declarado; não utilizado e declarado.

Outra coisa que pode ajudar a fazer uma limpeza é o relatório de Convergência de Dependências do plug-in de relatórios de informações do projeto Maven .

Pascal Thivent
fonte
5
Como posso disparar isso no Eclipse?
Daniil Shevelev
134
Cuidado com a dependência: analise, algumas bibliotecas usadas em tempo de execução são consideradas não utilizadas.
Nereis
27
Para evitar relatar o tempo de execução e as dependências fornecidas como não utilizadas, a ignoreNonCompileopção pode ser configurada como true.
sudeep
tenha cuidado ao usar dependência: analisar, mesmo eu estava usando 'api3'depedency EJP mas o relatório mostra que era 'não utilizado e declarou'
Akhil S Kamath
Para entender os resultados da análise, consulte esta resposta: "Dependências não declaradas usadas são aquelas necessárias, mas que não foram explicitamente declaradas como dependências no seu projeto". - stackoverflow.com/questions/4565740/…
Janac Meena
49

Você pode usar dependency:analyze -DignoreNonCompile

Isto irá imprimir uma lista de usados não declarado e não utilizados declarados dependências (ignorando runtime/ provided/ test/ systemescopos para análise de dependência não utilizado.)

Cuidado ao usar isso, runtimepois algumas bibliotecas usadas são consideradas não utilizadas!

Para mais detalhes consulte este link

Saikat
fonte
4
[mais] 1 para a menção em tempo de execução!
gaurav
1
Você está certo: algumas dependências de tempo de execução são declaradas como não utilizadas, mas de fato necessárias.
Smart Coder
43

Como já foi dito, você pode usar a dependência: analise o objetivo para descobrir quais dependências são usadas e declaradas, usadas e não declaradas ou não usadas e declaradas. Você também pode encontrar dependência: analy-dep-mgt útil para procurar incompatibilidades na seção dependencyManagement.

Você pode simplesmente remover dependências diretas indesejadas do seu POM, mas se elas forem introduzidas por jarros de terceiros, poderá usar as <exclusions>tags em uma dependência para excluir os jarros de terceiros (consulte a seção intitulada Exclusões de dependência para obter detalhes e algumas discussões) . Aqui está um exemplo que exclui o registro comum da dependência do Spring:

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring</artifactId>
  <version>2.5.5</version>
  <exclusions>
    <exclusion>
      <groupId>commons-logging</groupId>
      <artifactId>commons-logging</artifactId>
    </exclusion>
  </exclusions> 
</dependency>
Vendedor rico
fonte
3
(IntelliJ) Eu usei o plugin Jonnyzzz, como comentado na pergunta. Bom plugin, funciona bem com o IntelliJ 2016.1.3
Benj
34

Você já viu o plug-in de dependência do Maven ? Isso não removerá nada para você, mas possui ferramentas para permitir que você faça a análise por conta própria. Estou pensando particularmente em

mvn dependency:tree
Brian Agnew
fonte
1
Excelentes - graças (não poderia encontrar o que eu estava procurando como eu continuei procurando "dependências limpas" e foi vomitar o plugin limpo !! mas este parece promissor .. dependência mvn: analisar)
14

Eu tive um tipo semelhante de problema e decidi escrever um script que remove as dependências para mim. Usando isso, consegui remover metade das dependências com bastante facilidade.

http://samulisiivonen.blogspot.com/2012/01/cleanin-up-maven-dependencies.html

user1132305
fonte
2
Observe que este script não usa mvn dependency:analyze. Ele apenas tenta remover todas as dependências e verifica se mvn installfunciona.
Dieter