java - pom - Maven: ¿Cómo incluir los frascos, que no están disponibles en los representantes de un proyecto J2EE?
maven repository (11)
en mi proyecto J2EE tengo un par de dependencias, que no están disponibles en ningún repositorio Maven, porque son bibliotecas propietarias. Estas bibliotecas deben estar disponibles en tiempo de ejecución, por lo que deben copiarse al destino /.../ WEB-INF / lib ...
En este momento, los estoy enumerando como dependencia del sistema en mi POM, pero con este método el problema es que no se copian en la compilación de destino durante la compilación. Además, este método no es muy elegante.
Entonces, ¿cuál es la mejor forma de integrarlos en Maven?
Nota: No quiero crear mi propio repositorio Maven.
¡Ninguna de las soluciones funciona si estás usando la compilación de Jenkins! Cuando pom se ejecuta dentro del servidor de compilación de Jenkins ... estas soluciones fallarán, ya que Jenkins run pom intentará descargar estos archivos del repositorio de la empresa.
Copie jar en src / main / resources / lib (crear carpeta lib). Estos serán parte de su proyecto e irán hasta el servidor de implementación. En el servidor de implementación, asegúrese de que las secuencias de comandos de inicio contengan src / main / resources / lib / * en classpath. Viola.
Como ya dijiste, no quieres configurar tu propio repositorio, quizás esto ayude.
Puede usar el objetivo del archivo de instalación de maven-install-plugin para instalar un archivo en el repositorio local. Si crea un script con una invocación de Maven para cada archivo y lo mantiene junto a los jars, usted (y cualquier otra persona con acceso) puede instalar fácilmente los jars (y los archivos pom asociados) en su repositorio local.
Por ejemplo:
mvn install:install-file -Dfile=/usr/jars/foo.jar -DpomFile=/usr/jars/foo.pom
mvn install:install-file -Dfile=/usr/jars/bar.jar -DpomFile=/usr/jars/bar.pom
o solo
mvn install:install-file -Dfile=ojdbc14.jar -DgroupId=com.oracle -DartifactId=ojdbc14 -Dversion=10.2.0 -Dpackaging=jar
A continuación, puede hacer referencia a las dependencias de forma normal en su proyecto.
Sin embargo, su mejor opción es configurar un repositorio remoto interno y recomendaría usar Nexus yo mismo. Se puede ejecutar en su caja de desarrollo si es necesario, y la sobrecarga es mínima.
Continúe usándolos como una dependencia del sistema y cópielos en target /.../ WEB-INF / lib ... utilizando el complemento de dependencia Maven:
http://maven.apache.org/plugins/maven-dependency-plugin/examples/copying-artifacts.html
Crea una carpeta de repositorio bajo tu proyecto. Echemos
${project.basedir}/src/main/resources/repo
Luego, instale su jar personalizado en este repositorio:
mvn install:install-file -Dfile=[FILE_PATH] /
-DgroupId=[GROUP] -DartifactId=[ARTIFACT] -Dversion=[VERS] /
-Dpackaging=jar -DlocalRepositoryPath=[REPO_DIR]
Por último, agregue las siguientes definiciones de repositorio y dependencia a los proyectos pom.xml:
<repositories>
<repository>
<id>project-repo</id>
<url>file://${project.basedir}/src/main/resources/repo</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>[GROUP]</groupId>
<artifactId>[ARTIFACT]</artifactId>
<version>[VERS]</version>
</dependency>
</dependencies>
Instalar solo no funcionó para mí.
mvn deploy:deploy-file -Durl=file:///home/me/project/lib/ /
-Dfile=target/jzmq-2.1.3-SNAPSHOT.jar -DgroupId=org.zeromq /
-DartifactId=zeromq -Dpackaging=jar -Dversion=2.1.3
La solución de @Ric Jafe es lo que funcionó para mí.
Esto es exactamente lo que estaba buscando. Una forma de impulsarlo para el código de prueba de investigación. Nada sofisticado. Sí, sé que eso es lo que todos dicen :) Las diversas soluciones de complemento maven parecen ser excesivas para mis propósitos. Tengo algunos frascos que me dieron como libs de terceros con un archivo pom. Quiero que se compile / ejecute rápidamente. Esta solución que trivialmente adapté a Python funcionó de maravillas para mí. Cortar y pegar en mi pom. El código de Python / Perl para esta tarea se encuentra en esta sección de preguntas y respuestas: ¿Puedo agregar archivos jar a maven 2 classpath de compilación sin instalarlos?
def AddJars(jarList):
s1 = ''''
for elem in jarList:
s1+= """
<dependency>
<groupId>local.dummy</groupId>
<artifactId>%s</artifactId>
<version>0.0.1</version>
<scope>system</scope>
<systemPath>${project.basedir}/manual_jars/%s</systemPath>
</dependency>/n"""%(elem, elem)
return s1
Necesita configurar un repositorio local que alojará dichas bibliotecas. Hay una serie de proyectos que hacen exactamente eso. Por ejemplo Artifactory .
Para las personas que desean una solución rápida a este problema:
<dependency>
<groupId>LIB_NAME</groupId>
<artifactId>LIB_NAME</artifactId>
<version>1.0.0</version>
<scope>system</scope>
<systemPath>${basedir}/WebContent/WEB-INF/lib/YOUR_LIB.jar</systemPath>
</dependency>
simplemente proporcione a su biblioteca un groupID único y un nombre de artefacto y señale dónde se encuentra en el sistema de archivos. Tú eres bueno para irte.
Por supuesto, esta es una solución rápida y sucia que SÓLO funcionará en su máquina y si no cambia la ruta a las librerías. Pero algunas veces, eso es todo lo que quiere, ejecutar y hacer algunas pruebas.
EDITAR: simplemente volvió a escribir la pregunta y se dio cuenta de que el usuario ya estaba usando mi solución como solución temporal. Dejaré mi respuesta como una ayuda rápida para los demás que lleguen a esta pregunta. Si alguien no está de acuerdo con esto, por favor déjame un comentario. :)
Puede intentar usar maven-external-dependency-plugin, que muestra una buena manera de agregar archivos jar externos a cualquier proyecto Maven.
Si lo entiendo bien, si lo que quiere hacer es exportar dependencias durante la fase de compilación, por lo que no habrá necesidad de recuperar manualmente las bibliotecas necesarias, puede usar las copy-dependencies mojo.
Espero que pueda ser útil en tu caso ( examples )
puede instalarlos en un repositorio privado y local (por ejemplo, .m2 / repositorio en su directorio personal): más detalles aquí