1. El problema y las opciones
Maven es una herramienta muy versátil y sus repositorios públicos disponibles son insuperables. Sin embargo, siempre habrá un artefacto que no está alojado en ningún lugar , o es arriesgado depender del repositorio donde está alojado, ya que puede que no esté activo cuando lo necesite.
Cuando eso sucede, hay algunas opciones:
- morder la bala e instalar una solución de gestión de repositorios completa como Nexus
- Intente cargar el artefacto en uno de los repositorios públicos de mayor reputación.
- instale el artefacto localmente usando un complemento de maven
Nexus es, por supuesto, la solución más madura, pero también es la más compleja . Aprovisionar una instancia para ejecutar Nexus, configurar el propio Nexus, configurarlo y mantenerlo puede ser excesivo para un problema tan simple como usar un solo jar. Sin embargo, si este escenario (alojar artefactos personalizados) es común, un administrador de repositorio tiene mucho sentido.
Hacer que el artefacto se cargue en un repositorio público o en la central de Maven directamente también es una buena solución, pero generalmente es larga. Además, es posible que la biblioteca no esté habilitada para Maven, lo que hace que el proceso sea mucho más difícil, por lo que no es una solución realista para poder usar el artefacto AHORA.
Eso deja la tercera opción, agregar el artefacto en el control de código fuente y usar un complemento maven, en este caso, el complemento maven-install-plugin para instalarlo localmente antes de que el proceso de compilación lo necesite . Esta es, con mucho, la opción más fácil y confiable disponible.
2. Instale Local Jar con m aven-install-plugin
Comencemos con la configuración completa necesaria para instalar el artefacto en nuestro repositorio local:
org.apache.maven.plugins maven-install-plugin 2.5.1 org.somegroup someartifact 1.0 jar ${basedir}/dependencies/someartifact-1.0.jar true install-jar-lib install-file validate
Ahora, analicemos y analicemos los detalles de esta configuración.
2.1. La información del artefacto
La información del artefacto se define como parte del elemento. La sintaxis real es muy similar a declarar la dependencia: un groupId , artifactId y elementos de versión .
La siguiente parte de la configuración requiere definir el empaquetado del artefacto; esto se especifica como jar .
A continuación, debemos proporcionar la ubicación del archivo jar real que se instalará; puede ser una ruta de archivo absoluta o puede ser relativa, utilizando las propiedades disponibles en Maven . En este caso, la propiedad $ {basedir} representa la raíz del proyecto, es decir, la ubicación donde existe el archivo pom.xml . Esto significa que el archivo someartifact-1.0.jar debe colocarse en un directorio / dependencies / debajo de la raíz.
Finalmente, hay varios otros detalles opcionales que también se pueden configurar.
2.2. La ejecución
La ejecución del objetivo del archivo de instalación está vinculada a la fase de validación del ciclo de vida de compilación estándar de Maven. Como tal, antes de intentar compilar, deberá ejecutar la fase de validación explícitamente:
mvn validate
Después de este paso, la compilación estándar funcionará:
mvn clean install
Una vez que se ejecuta la fase de compilación, nuestro someartifact-1.0.jar se instala correctamente en nuestro repositorio local, al igual que cualquier otro artefacto que pueda haber sido recuperado de Maven central.
2.3. Generar un POM frente a suministrar el POM
La cuestión de si necesitamos proporcionar un archivo pom.xml para el artefacto o no depende principalmente de las dependencias del tiempo de ejecución del propio artefacto. En pocas palabras, si el artefacto tiene dependencias en tiempo de ejecución de otros archivos jar, estos también deberán estar presentes en la ruta de clases en tiempo de ejecución. Con un artefacto simple que no debería ser un problema, ya que probablemente no tendrá dependencias en tiempo de ejecución (una hoja en el gráfico de dependencias).
La opción generatePom en el objetivo del archivo de instalación debería ser suficiente para este tipo de artefactos:
true
Sin embargo, si el artefacto es más complejo y tiene dependencias no triviales , entonces, si estas dependencias aún no están en la ruta de clases, deben agregarse. Una forma de hacerlo es definiendo estas nuevas dependencias manualmente en el archivo pom del proyecto. Una mejor solución es proporcionar un archivo pom.xml personalizado junto con el artefacto instalado:
false ${basedir}/dependencies/someartifact-1.0.pom
Esto permitirá a Maven resolver todas las dependencias del artefacto definido en este pom.xml personalizado , sin tener que definirlas manualmente en el archivo pom principal del proyecto.
3. Conclusión
Este artículo repasa cómo usar un jar que no está alojado en ningún lugar dentro de un proyecto de Maven instalándolo localmente con maven-install-plugin .