Funciona bem, mas não é necessário colocar a tag de construção dentro das tags de perfil.
Julien BRENELIERE
2
Nota: <excludeScope>test</excludeScope>vai para dentro do configurationnó.
Jesse Chisholm
84
A melhor abordagem depende do que você deseja fazer:
Se você deseja agrupar suas dependências em um arquivo WAR ou EAR, basta configurar o tipo de pacote do seu projeto como EAR ou WAR. O Maven agrupará as dependências no local certo.
Se você deseja criar um arquivo JAR que inclua seu código junto com todas as suas dependências, use o plug-in assembly com o descritor jar-with-dependencies . O Maven irá gerar um arquivo JAR completo com todas as suas classes, além das classes de quaisquer dependências.
Se você deseja simplesmente puxar suas dependências para o diretório de destino interativamente, use o plug-in de dependência para copiar seus arquivos.
Se você deseja extrair as dependências para algum outro tipo de processamento, provavelmente precisará gerar seu próprio plugin. Existem APIs para obter a lista de dependências e sua localização no disco. Você terá que levá-lo de lá ...
Dê uma olhada no plug-in de dependência do Maven , especificamente, o objetivo de dependência: cópia-dependências . Dê uma olhada no exemplo sob o título A dependência: dependências de cópia mojo . Defina a propriedade de configuração outputDirectory como $ {basedir} / target / lib (acredito que você precisará testar).
Alternativamente, você pode usar $ {project.build.directory} / lib ao invés de $ {basedir} / target / lib
Cuga
31
Uma solução simples e elegante para o caso em que é necessário copiar as dependências para um diretório de destino sem usar outras fases do maven (achei isso muito útil ao trabalhar com o Vaadin).
obrigado! esta é a maneira mais fácil de copiar apenas as bibliotecas que seriam necessárias para um projeto em uma pasta em algum lugar, para que você possa copiá-las em outro lugar, se necessário, por exemplo, um projeto não baseado em tarefas. Note-se que é claro que você pode simplesmente passar em uma pasta codificado para usar se você quiser, por exemplomvn dependency:copy-dependencies -DoutputDirectory=./lib
Se você deseja entregar um pacote do seu jar de aplicativo, juntamente com todas as suas dependências e alguns scripts para chamar o MainClass, consulte o appassembler-maven-plugin .
A configuração a seguir gerará scripts para o Windows e o Linux iniciarem o aplicativo (com um caminho gerado referenciando todos os jars de dependência, faça o download de todas as dependências (em uma pasta lib abaixo de target / appassembler) .O plug-in de montagem pode ser usado para empacotar todo diretório appassembler em um zip que é instalado / implementado junto com o jar no repositório.
<plugin><groupId>org.codehaus.mojo</groupId><artifactId>appassembler-maven-plugin</artifactId><version>1.0</version><executions><execution><id>generate-jsw-scripts</id><phase>package</phase><goals><goal>generate-daemons</goal></goals><configuration><!--declare the JSW config --><daemons><daemon><id>myApp</id><mainClass>name.seller.rich.MyMainClass</mainClass><commandLineArguments><commandLineArgument>start</commandLineArgument></commandLineArguments><platforms><platform>jsw</platform></platforms></daemon></daemons><target>${project.build.directory}/appassembler</target></configuration></execution><execution><id>assemble-standalone</id><phase>integration-test</phase><goals><goal>assemble</goal></goals><configuration><programs><program><mainClass>name.seller.rich.MyMainClass</mainClass><!-- the name of the bat/sh files to be generated --><name>mymain</name></program></programs><platforms><platform>windows</platform><platform>unix</platform></platforms><repositoryLayout>flat</repositoryLayout><repositoryName>lib</repositoryName></configuration></execution></executions></plugin><plugin><artifactId>maven-assembly-plugin</artifactId><version>2.2-beta-4</version><executions><execution><phase>integration-test</phase><goals><goal>single</goal></goals><configuration><descriptors><descriptor>src/main/assembly/archive.xml</descriptor></descriptors></configuration></execution></executions></plugin>
O descritor de montagem (em src / main / assembly) para empacotar o diretório como um zip seria:
Apenas para explicar o que já foi dito em breve. Eu queria criar um arquivo JAR executável que incluísse minhas dependências e meu código. Isso funcionou para mim:
(2) Executando o assembly de compilação do mvn: o assembly produziu o my-project-0.1-SNAPSHOT-jar-with-dependencies.jar desejado no diretório de destino do projeto.
(3) Executei o JAR com java -jar my-project-0.1-SNAPSHOT-jar-with-dependencies.jar
Seu exemplo de código não resolve o problema, apenas agrupa tudo em um único JAR. Sim, o plug-in de montagem pode ser usado para atingir esse objetivo, mas não assim.
Duncan Jones
Embora, em outras leituras, talvez você esteja respondendo a esse comentário .
Duncan Jones
faz tanto tempo que eu realmente não me lembro ... além disso, fiquei enferrujado desde que me concentrei na administração do Linux na minha última empresa - mas obrigado pelo feedback!
precisa saber é o seguinte
0
Se você estiver tendo problemas relacionados a dependências que não aparecem no arquivo WEB-INF / lib ao executar em um servidor Tomcat no Eclipse, dê uma olhada no seguinte:
Respostas:
Isso funciona para mim:
fonte
excludeScope
opção ( maven.apache.org/plugins/maven-dependency-plugin/… ).<excludeScope>test</excludeScope>
vai para dentro doconfiguration
nó.A melhor abordagem depende do que você deseja fazer:
fonte
Funciona para mim com o diretório de dependências criado na pasta de destino. Gosto disso!
fonte
Dê uma olhada no plug-in de dependência do Maven , especificamente, o objetivo de dependência: cópia-dependências . Dê uma olhada no exemplo sob o título A dependência: dependências de cópia mojo . Defina a propriedade de configuração outputDirectory como $ {basedir} / target / lib (acredito que você precisará testar).
Espero que isto ajude.
fonte
Uma solução simples e elegante para o caso em que é necessário copiar as dependências para um diretório de destino sem usar outras fases do maven (achei isso muito útil ao trabalhar com o Vaadin).
Exemplo completo de pom:
Então corra
mvn process-sources
As dependências do arquivo jar podem ser encontradas em
/target/dependency
fonte
Se você deseja fazer isso ocasionalmente (e, portanto, não deseja alterar seu POM), tente esta linha de comando:
Se você omitir o último argumento , as dependências serão colocadas
target/dependencies
.fonte
mvn dependency:copy-dependencies -DoutputDirectory=./lib
Tente algo como isto:
fonte
maven clean install
, então você vai encontrarlib
emtarget
install
fase comprocess-resources
para que as dependências são copiados antes dobuild
gol corridasTudo o que você precisa é do seguinte snippet nos pom.xml's
build/plugins
:O acima será executado na
package
fase quando você executarE as dependências serão copiadas para o outputDirectory especificado no snippet, ou seja
lib
, neste caso.Se você deseja fazer isso ocasionalmente, não são necessárias alterações no pom.xml. Basta executar o seguinte:
Para substituir o local padrão, ou seja
${project.build.directory}/dependencies
, adicione uma propriedade do sistema denominadaoutputDirectory
iefonte
supondo
aqui está o que funcionou para mim:
fonte
Se você deseja entregar um pacote do seu jar de aplicativo, juntamente com todas as suas dependências e alguns scripts para chamar o MainClass, consulte o appassembler-maven-plugin .
A configuração a seguir gerará scripts para o Windows e o Linux iniciarem o aplicativo (com um caminho gerado referenciando todos os jars de dependência, faça o download de todas as dependências (em uma pasta lib abaixo de target / appassembler) .O plug-in de montagem pode ser usado para empacotar todo diretório appassembler em um zip que é instalado / implementado junto com o jar no repositório.
O descritor de montagem (em src / main / assembly) para empacotar o diretório como um zip seria:
fonte
Se você tornar seu projeto um tipo de guerra ou ouvido copiará as dependências.
fonte
Você pode usar o Shade Plugin para criar um uber jar no qual é possível agrupar todas as suas dependências de terceiros.
fonte
Apenas para explicar o que já foi dito em breve. Eu queria criar um arquivo JAR executável que incluísse minhas dependências e meu código. Isso funcionou para mim:
(1) No pom, em <build> <plugins>, incluí:
(2) Executando o assembly de compilação do mvn: o assembly produziu o my-project-0.1-SNAPSHOT-jar-with-dependencies.jar desejado no diretório de destino do projeto.
(3) Executei o JAR com java -jar my-project-0.1-SNAPSHOT-jar-with-dependencies.jar
fonte
É uma solução pesada para incorporar dependências pesadas, mas o Plug-in de montagem do Maven faz o truque para mim.
@ A resposta do Rich Seller deve funcionar, embora em casos mais simples você precise apenas deste trecho do guia de uso :
fonte
Se você estiver tendo problemas relacionados a dependências que não aparecem no arquivo WEB-INF / lib ao executar em um servidor Tomcat no Eclipse, dê uma olhada no seguinte:
ClassNotFoundException DispatcherServlet ao iniciar o Tomcat (dependências do Maven não copiadas para wtpwebapps)
Você simplesmente precisava adicionar as Dependências do Maven em Propriedades do projeto> Conjunto de implantação.
fonte