java - exclusion - maven dependency provided example
Maven no desplegará dependencias (3)
Tengo un proyecto simple con 3 dependencias pero por alguna razón cuando estoy ejecutando desde el eclipse ejecuto como -> maven install. no entiendo las dependencias no dentro de la jarra de instantáneas y no afuera ... ¿alguna idea? este es mi pom:
<?xml version="1.0"?>
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com</groupId>
<artifactId>trade</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>trade</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.12</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>
Has elegido un estilo de envase de embalaje. Por lo tanto, las dependencias no estarán presentes dentro del paquete.
Cuando construya el paquete y ejecute la fase de compilación, Maven ya habría descargado las dependencias en el repositorio Maven local (generalmente ubicado en el directorio .m2 en su directorio de inicio).
Si desea tener las dependencias empaquetadas dentro de la distribución, un archivo EAR / WAR es un medio mejor, y esto se aplica solo a aplicaciones Java EE, y no para aplicaciones Java SE independientes.
Además, ciertas dependencias no se empaquetarán, a pesar de un esquema de empaquetado EAR / WAR involucrado. Esto se debe a los ámbitos aplicados a las dependencias. JUnit, que tiene un alcance de prueba, nunca se empaquetará, ya que su uso está restringido solo a la ejecución de la prueba.
Primero, asegúrese de que puede construir el proyecto fuera de Eclipse. En un símbolo del sistema, prueba ''mvn install''. Eso debería poner tus deps debajo de $ HOME / .m2 / repository. Si lo hace, entonces el problema es con Eclipse.
Si su objetivo es empaquetar sus deps con su archivo, tendrá que mirar los complementos de ensamblaje y / o dependencia .
Además, recomiendo instalar m2eclipse .
(...) No obtengo las dependencias. no dentro de la jarra de instantáneas y no afuera ... ¿alguna idea?
Sí: esto no se supone que ocurra para un proyecto con un empaque de jar
. El jar "solo" creado contiene clases de su proyecto, las dependencias son "solo" utilizadas durante la compilación y ejecución de pruebas.
Del Mecanismo de Introducción al Dependencia :
Alcance de la dependencia
El ámbito de dependencia se usa para limitar la transitividad de una dependencia, y también para afectar el classpath usado para varias tareas de compilación.
Hay 6 ámbitos disponibles:
- compilar
Este es el alcance predeterminado, utilizado si no se especifica ninguno. Las dependencias de compilación están disponibles en todos los classpaths de un proyecto. Además, esas dependencias se propagan a proyectos dependientes.- previsto
Esto es muy similar a la compilación, pero indica que espera que el JDK o un contenedor proporcione la dependencia en tiempo de ejecución. Por ejemplo, al crear una aplicación web para Java Enterprise Edition, debe establecer la dependencia de la API de Servlet y las API de Java EE relacionadas en el alcance proporcionado porque el contenedor web proporciona esas clases. Este alcance solo está disponible en el classpath de compilación y prueba, y no es transitivo.- tiempo de ejecución
Este ámbito indica que la dependencia no es necesaria para la compilación, pero es para la ejecución. Está en los classpaths de tiempo de ejecución y de prueba, pero no en el classpath de compilación.- prueba
Este ámbito indica que la dependencia no es necesaria para el uso normal de la aplicación, y solo está disponible para las fases de compilación y ejecución de pruebas.- sistema
Este alcance es similar al proporcionado, excepto que debe proporcionar el JAR que lo contiene explícitamente. El artefacto siempre está disponible y no se busca en un repositorio.- importar (solo disponible en Maven 2.0.9 o posterior)
Este alcance solo se usa en una dependencia de tipo pom en la sección<dependencyManagement>
. Indica que el POM especificado debe reemplazarse con las dependencias en la sección<dependencyManagement>
ese POM. Dado que son reemplazados, las dependencias con un alcance de importación en realidad no participan en la limitación de la transitividad de una dependencia....
Si desea construir un archivo ejecutable independiente que incluya las dependencias, considere utilizar el Complemento de ensamblaje de Maven y el descriptor de jar-with-dependencies
predefinido. Eche un vistazo a estas respuestas anteriores:
- Construir un jar ejecutable con maven 2
- ¿Es posible crear un contenedor "uber" que contenga las clases de proyecto y las dependencias del proyecto como archivos jar con un archivo de manifiesto personalizado?
- Problema al crear un archivo ejecutable con maven
Otras opciones incluyen el plugin maven shade , el plugin onejar-maven . Para casos de uso simple, sugiero usar el plugin de ensamblaje.