java - que - maven tutorial español
Cómo incluir dependencias del sistema en la guerra construida usando maven (6)
Déjame intentar resumir las opciones que probé:
<packagingIncludes>${java.home}/lib/jfxrt.jar</packagingIncludes>
¡Esto no funciona! Además, solo con el nombre del tarro, excluye todo lo demás, así que si está dispuesto a intentarlo, intente
<packagingIncludes>${java.home}/lib/jfxrt.jar,**/*</packagingIncludes>
La respuesta de Jatin parecía un poco compleja y traté de revisar el POM una y otra vez para averiguar dónde se mencionaban exactamente los tarros del sistema que se incluirían en WEB-INF POM.
De todos modos, terminé usando esta solución, que no funcionaba al principio, pero después de un tiempo y algunas correcciones funcionaron:
installed the jar in my local repository
usando el siguiente comando:
mvn install:install-file -Dfile="C:/Users/hp/Documents/NetBeansProjects/TwitterAndLoginRadiusMaven/lib/LoginRadius-1.0.jar" -DgroupId=LoginRadius -DartifactId=LoginRadius -Dversion=1.0 -Dpackaging=jar
Después de ejecutar el comando anterior, cambié la dependencia en POM a
<dependency>
<groupId>LoginRadius</groupId>
<artifactId>LoginRadius</artifactId>
<!--<scope>system</scope>-->
<version>1.0</version>
<!--<systemPath>${basedir}/lib/LoginRadius-1.0.jar</systemPath>-->
</dependency>
NOTA - Vea que he comentado el alcance del sistema y systemPath.
Construyendo la guerra ahora, incluye este LoginRadius-1.0.jar en WEB-INF / lib
He buscado en Internet durante bastante tiempo y no puedo averiguar cómo configurar el complemento de Maven-War o algo parecido para que las dependencias del sistema se incluyan en la guerra integrada (carpeta WEB-INF / lib)
Utilizo el complemento de dependencia de Maven en caso de un jar-build como:
<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>
pero no puedo entender qué se debe hacer en caso de una construcción de guerra. He intentado usar el complemento de guerra de maven, pero no incluye las dependencias del sistema en la compilación.
[ACTUALIZAR]
Tengo depedencias de tipo:
<dependency>
<groupId>LoginRadius</groupId>
<artifactId>LoginRadius</artifactId>
<scope>system</scope>
<version>1.0</version>
<systemPath>${basedir}/lib/LoginRadius-1.0.jar</systemPath>
</dependency>
en mi POM y estas dependencias no se incluyen en WEB-INF / lib cuando se construye la guerra.
Puede ser un problema del alcance donde se definen las dependencias:
- compilar : las dependencias en el ámbito de "compilación" se copiarán automáticamente al WEB-INF / lib del objetivo como parte de la compilación de Maven.
- proporcionado : Las dependencias en el alcance "provisto" no se copiarán (se usaría para los archivos jar provistos por el servidor, como el archivo JSP-api.jar).
Para generar una GUERRA en Maven, se deben ejecutar 2 objetivos: "compilar" y "guerra: guerra". Ejecutar el objetivo de la guerra por sí solo no compilará la fuente de Java. Si lo prefiere, ejecute uno de los objetivos principales, como "paquete".
Si usa eclipse :
seleccione el POM en el explorador de proyectos y seleccione la opción del menú contextual "Ejecutar". Esto construirá y ejecutará el perfil de ejecución de Maven (o usará uno existente). Los perfiles de ejecución de Maven se comportan como los perfiles de ejecución / depuración normales, excepto que sus cuadros de diálogo de edición de perfil son compatibles con las características específicas de Maven.
fuente: https://coderanch.com/t/594897/ide/include-maven-dependencies-war-file
Según su POM inicial, sugeriría enviarlos directamente al directorio WEB-INF / lib
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/${project.artifactId}-${project.version}/WEB-INF/lib</outputDirectory>
</configuration>
Si por casualidad no puede instalar la biblioteca de terceros en su repositorio local, debido a algunas verificaciones de nomenclatura / empaquetamiento tontas por parte de terceros, aún puede agregar las dependencias de ámbito de su system
a su paquete final en el momento de la compilación (al menos si están construyendo una aplicación web) usando el maven-war-plugin
donde necesitarías crear una configuración como esta.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<failOnMissingWebXml>true</failOnMissingWebXml>
<webResources>
<resource>
<directory>path/to/lib/in/project</directory>
<targetPath>WEB-INF/lib</targetPath>
</resource>
</webResources>
</configuration>
</plugin>
No estoy seguro, pero creo que la biblioteca debe estar en algún lugar local del directorio base del proyecto. Tiendo a crear un directorio bajo src/main/
called lib
para guardar este tipo de librerías de terceros. Durante el proceso de construcción, se colocan en el directorio correcto y se agregan al archivo war.
Si se refería a dependencias jar, a continuación se muestra un ejemplo de pom.xml que toma los archivos necesarios y genera un archivo war:
<build>
<defaultGoal>install</defaultGoal>
<sourceDirectory>${project.basedir}/src/main/java</sourceDirectory>
<testSourceDirectory>${project.basedir}/src/test/java</testSourceDirectory>
<outputDirectory>${project.basedir}/target/classes</outputDirectory>
<testOutputDirectory>${project.basedir}/target/test-classes</testOutputDirectory>
<resources>
<resource>
<directory>${project.basedir}/src/main/resources</directory>
</resource>
</resources>
<testResources>
<testResource>
<directory>${project.basedir}/src/test/resources</directory>
</testResource>
</testResources>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.0.2</version>
<configuration>
<source>1.5</source>
<target>1.5</target>
<debug>true</debug>
</configuration>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.4</version>
<configuration>
<includeEmptyDirs>true</includeEmptyDirs>
<webResources>
<resource>
<directory>ui</directory>
<targetPath></targetPath>
<includes>
<include>**</include>
</includes>
</resource>
<resource>
<directory>lib</directory>
<targetPath>WEB-INF</targetPath>
<includes>
<include>**/*.xml</include>
<include>**/log4j.properties</include>
</includes>
</resource>
//edited below
<resource>
<directory>lib</directory>
<targetPath>WEB_INF/lib</targetPath>
<includes>
<include>**/*.jar</include>
</includes>
</resource>
</webResources>
<webXml>${project.basedir}/WEB-INF/web.xml</webXml>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
</plugins>
</build>
mvn org.apache.maven.plugins:maven-install-plugin:2.5.1:install-file /
-Dfile=~/Desktop/medici-1.0.1.jar /
-DgroupId=com.hp /
-DartifactId=medici /
-Dversion=1.0.1 /
-Dpackaging=jar /
-DlocalRepositoryPath=lib
Si todo salió bien, puedes encontrar tu artefacto publicado dentro de lib.
project$ find lib
lib
lib/com
lib/com/hp
lib/com/hp/medici
lib/com/hp/medici/1.0.1
lib/com/hp/medici/1.0.1/medici-1.0.1.jar
lib/com/hp/medici/1.0.1/medici-1.0.1.pom
lib/com/hp/medici/maven-metadata-local.xml
Note the structure here mimics what you’d find in ~/.m2.
Ahora, en su pom.xml, declare en su proyecto un repositorio de Maven.
<repositories>
<repository>
<id>local-repo</id>
<url>file://${basedir}/lib</url>
</repository>
</repositories>
Y, por último, en su pom.xml declare una dependencia en el .jar local como lo haría para cualquier dependencia.
<dependencies>
<dependency>
<groupId>com.hp.medici</groupId>
<artifactId>medici</artifactId>
<version>1.0.1</version>
</dependency>
</dependencies>