forçar o Maven a copiar dependencies no target / lib

Como faço para que as dependencies de tempo de execução do meu projeto sejam copiadas para a pasta target/lib ?

Como está agora, após a mvn clean install do mvn clean install a pasta de target contém apenas o jar do meu projeto, mas nenhuma das dependencies do tempo de execução.

   

Isso funciona para mim:

  ...   qa    maven-dependency-plugin   install  copy-dependencies   ${project.build.directory}/lib          

A melhor abordagem depende do que você deseja fazer:

  • Se você deseja empacotar suas dependencies em um arquivo WAR ou EAR, simplesmente configure o tipo de empacotamento de seu projeto para EAR ou WAR. O Maven agrupará as dependencies no local correto.
  • Se você deseja criar um arquivo JAR que inclua seu código junto com todas as suas dependencies, use o plug-in de assembly com o descritor jar-with-dependencies . O Maven irá gerar um arquivo JAR completo com todas as suas classs, além das classs de quaisquer dependencies.
  • Se você quiser simplesmente colocar suas dependencies no diretório de destino interativamente, use o plugin de dependência para copiar seus arquivos.
  • Se você quiser extrair as dependencies de algum outro tipo de processamento, provavelmente precisará gerar seu próprio plugin. Existem APIs para obter a lista de dependencies e sua localização no disco. Você terá que tirar isso de lá …
 mvn install dependency:copy-dependencies 

Funciona para mim com o diretório de dependencies criado na pasta de destino. Gosto disso!

Dê uma olhada no plug-in de dependência do Maven , especificamente, a dependência: meta de dependencies de cópia . Dê uma olhada no exemplo sob o título O dependency: dependencies de cópia mojo . Defina a propriedade de configuração outputDirectory como $ {basedir} / target / lib (acredito, você terá que testar).

Espero que isto ajude.

Uma solução simples e elegante para o caso em que é necessário copiar as dependencies para um diretório de destino sem usar nenhuma outra fase do maven (achei isso muito útil ao trabalhar com o Vaadin).

Exemplo completo de pom:

  4.0.0 groupId artifactId 1.0   org.mybatis mybatis-spring 1.1.1      maven-dependency-plugin   process-sources  copy-dependencies   ${targetdirectory}        

Em seguida, execute mvn process-sources

As dependencies do arquivo jar podem ser encontradas em /target/dependency

Se você quiser fazer isso de forma ocasional (e, portanto, não quer mudar o seu POM), tente esta linha de comando:

  Dependência mvn: copy-dependencies -DoutputDirectory = $ {project.build.directory} / lib 

Se você omitir o último argumento , as dependencies serão colocadas no target/dependencies .

Tente algo assim:

  org.apache.maven.plugins maven-jar-plugin 2.4    true lib/ MainClass      org.apache.maven.plugins maven-dependency-plugin 2.4   copy install  copy-dependencies    ${project.build.directory}/lib      

Tudo o que você precisa é o seguinte snippet dentro dos build/plugins do pom.xml:

  maven-dependency-plugin   prepare-package  copy-dependencies   ${project.build.directory}/lib     

O acima será executado na fase de package quando você executar

 mvn clean package 

E as dependencies serão copiadas para o outputDirectory especificado no snippet, ou seja, lib neste caso.

Se você quiser fazer isso ocasionalmente, não será necessário fazer alterações em pom.xml. Basta executar o seguinte:

 mvn clean package dependency:copy-dependencies 

Para replace o local padrão, que é ${project.build.directory}/dependencies , inclua uma propriedade System denominada outputDirectory , ie

  -DoutputDirectory=${project.build.directory}/lib 

supondo

  • você não quer alterar o pom.xml
  • você não quer escopo de teste (por exemplo, junit.jar) ou dependencies fornecidas (por exemplo, wlfullclient.jar)

aqui está o que funcionou para mim:

 mvn install dependência: copy-dependencies -DincludeScope = tempo de execução -DoutputDirectory = target / lib

Se você quiser entregar um pacote do seu aplicativo jar, junto com todas as dependencies e alguns scripts para chamar o MainClass, consulte o appassembler-maven-plugin .

A seguinte configuração irá gerar scripts para Window e Linux para iniciar o aplicativo (com um caminho gerado referenciando todos os jars de dependência, baixe todas as dependencies (em uma pasta lib abaixo de target / appassembler). O plugin assembly pode então ser usado para empacotar todo diretório appassembler para um zip que é instalado / implementado junto com o jar no repository.

   org.codehaus.mojo appassembler-maven-plugin 1.0   generate-jsw-scripts package  generate-daemons      myApp name.seller.rich.MyMainClass  start   jsw    ${project.build.directory}/appassembler    assemble-standalone integration-test  assemble     name.seller.rich.MyMainClass  mymain    windows unix  flat lib      maven-assembly-plugin 2.2-beta-4   integration-test  single    src/main/assembly/archive.xml      

O descritor de assembly (em src / main / assembly) para empacotar o direcotry como um zip seria:

  archive  zip    ${project.build.directory}/appassembler /    

Se você fizer do seu projeto uma guerra ou um tipo de ouvido, copiará as dependencies.

Você pode usar o Shade Plugin para criar um jar em que você pode agrupar todas as suas dependencies de terceiros.

Apenas para soletrar o que já foi dito em breve. Eu queria criar um arquivo JAR executável que incluísse minhas dependencies junto com meu código. Isso funcionou para mim:

(1) No pom, sob , incluí:

  maven-assembly-plugin 2.2-beta-5    dk.certifikat.oces2.some.package.MyMainClass    jar-with-dependencies    

(2) Executando o assembly de compilation mvn: o assembly produziu o desejado my-project-0.1-SNAPSHOT-jar-with-dependencies.jar no diretório de destino do projeto.

(3) Eu corri o JAR com java -jar meu-projeto-0.1-SNAPSHOT-jar-with-dependencies.jar

É uma solução pesada para incorporar dependencies pesadas, mas o Plugin de Montagem do Maven faz o truque para mim.

Resposta @ Rich vendedor deve funcionar, embora para casos mais simples, você só precisa deste trecho do guia de uso :

     maven-assembly-plugin 2.2.2   jar-with-dependencies       

Se você está tendo problemas relacionados a dependencies que não aparecem no arquivo WEB-INF / lib ao executar em um servidor Tomcat no Eclipse, dê uma olhada nisso:

ClassNotFoundException DispatcherServlet ao iniciar o Tomcat (dependencies do Maven não copiadas para o wtpwebapps)

Você simplesmente tinha que adicionar as Dependências do Maven em Propriedades do Projeto> Montagem de Implantação.

  4.0.0 com.edge STORM2 0.0.1-SNAPSHOT jar STORM2 http://maven.apache.org  UTF-8       maven-assembly-plugin    com.edge.STORM2.LogAnalyserStorm    jar-with-dependencies        junit junit 3.8.1 test   org.apache.storm storm-core 1.1.1 provided    

@john Este é meu pom, estou faltando alguma coisa? as dependencies jar-com criadas, não contêm nenhuma class lib ou jar