Como obtenho as dependências de tempo de execução do meu projeto copiadas para a target/lib
pasta?
No momento, mvn clean install
a target
pasta contém apenas o jar do meu projeto, mas nenhuma das dependências de tempo de execução.
Como obtenho as dependências de tempo de execução do meu projeto copiadas para a target/lib
pasta?
No momento, mvn clean install
a target
pasta contém apenas o jar do meu projeto, mas nenhuma das dependências de tempo de execução.
Respostas:
Isso funciona para mim:
<project>
...
<profiles>
<profile>
<id>qa</id>
<build>
<plugins>
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<phase>install</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>
excludeScope
opção ( maven.apache.org/plugins/maven-dependency-plugin/… ).
<excludeScope>test</excludeScope>
vai para dentro do configuration
nó.
A melhor abordagem depende do que você deseja fazer:
mvn install dependency:copy-dependencies
Funciona para mim com o diretório de dependências criado na pasta de destino. Gosto disso!
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.
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:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>groupId</groupId>
<artifactId>artifactId</artifactId>
<version>1.0</version>
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.1.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<phase>process-sources</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${targetdirectory}</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
Então corra mvn process-sources
As dependências do arquivo jar podem ser encontradas em /target/dependency
Se você deseja fazer isso ocasionalmente (e, portanto, não deseja alterar seu POM), tente esta linha de comando:
dependência mvn: dependências de cópia -DoutputDirectory = $ {project.build.directory} / lib
Se você omitir o último argumento , as dependências serão colocadas target/dependencies
.
mvn dependency:copy-dependencies -DoutputDirectory=./lib
Tente algo como isto:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>MainClass</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.4</version>
<executions>
<execution>
<id>copy</id>
<phase>install</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>
${project.build.directory}/lib
</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
maven clean install
, então você vai encontrar lib
emtarget
install
fase com process-resources
para que as dependências são copiados antes do build
gol corridas
Tudo o que você precisa é do seguinte snippet nos pom.xml's build/plugins
:
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<phase>prepare-package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
O acima será executado na package
fase quando você executar
mvn clean package
E 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:
mvn clean package dependency:copy-dependencies
Para substituir o local padrão, ou seja ${project.build.directory}/dependencies
, adicione uma propriedade do sistema denominada outputDirectory
ie
-DoutputDirectory=${project.build.directory}/lib
supondo
aqui está o que funcionou para mim:
dependência de instalação do mvn: dependências de cópia -DincludeScope = tempo de execução -DoutputDirectory = destino / 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:
<assembly>
<id>archive</id>
<formats>
<format>zip</format>
</formats>
<fileSets>
<fileSet>
<directory>${project.build.directory}/appassembler</directory>
<outputDirectory>/</outputDirectory>
</fileSet>
</fileSets>
</assembly>
Se você tornar seu projeto um tipo de guerra ou ouvido copiará as dependências.
Você pode usar o Shade Plugin para criar um uber jar no qual é possível agrupar todas as suas dependências de terceiros.
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í:
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2-beta-5</version>
<configuration>
<archive>
<manifest>
<mainClass>dk.certifikat.oces2.some.package.MyMainClass</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
(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
É 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 :
<project>
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2.2</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
</plugins>
</build>
</project>
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:
Você simplesmente precisava adicionar as Dependências do Maven em Propriedades do projeto> Conjunto de implantação.