Agregar una dependencia en Maven

134

¿Cómo tomo un archivo jar que tengo y lo agrego al sistema de dependencia en maven 2? Seré el mantenedor de esta dependencia y mi código necesita este jar en la ruta de clase para que se compile.

Milhous
fuente

Respuestas:

139

Tendrás que hacer esto en dos pasos:

1. Dele a su JAR un groupId, artifactId y una versión y agréguelo a su repositorio.

Si no tiene un repositorio interno y solo está tratando de agregar su JAR a su repositorio local, puede instalarlo de la siguiente manera, utilizando cualquier groupId / artifactIds arbitrario:

mvn install:install-file -DgroupId=com.stackoverflow... -DartifactId=yourartifactid... -Dversion=1.0 -Dpackaging=jar -Dfile=/path/to/jarfile

También puede implementarlo en su repositorio interno si tiene uno y desea que esté disponible para otros desarrolladores de su organización. Sólo tiene que utilizar la interfaz basada en web de mi repositorio para agregar artefactos, pero usted debería ser capaz de lograr lo mismo usando mvn deploy:deploy-file ....

2. Actualice los proyectos dependientes para hacer referencia a este JAR.

Luego actualice la dependencia en el pom.xml de los proyectos que usan el JAR agregando lo siguiente al elemento:

<dependencies>
    ...
    <dependency>
        <groupId>com.stackoverflow...</groupId>
        <artifactId>artifactId...</artifactId>
        <version>1.0</version>
    </dependency>
    ...
</dependencies>
Jack Leow
fuente
3
¿Puedes agregar más detalles sobre la implementación? Tenemos un repositorio interno y quiero implementar mi archivo local jar instalado en ese repositorio para que otros desarrolladores y nuestro servidor de compilación también obtengan el jar.
Kieveli el
¡Esta respuesta debería obtener todos los me gusta! Lo he usado para agregar con éxito dependencias para mis proyectos maven en Google App Engine y Heroku.
Leo C Han
93

También puede especificar una dependencia que no esté en un repositorio maven. Podría ser útil cuando no existe un repositorio central de Maven para su equipo o si tiene un servidor CI

    <dependency>
        <groupId>com.stackoverflow</groupId>
        <artifactId>commons-utils</artifactId>
        <version>1.3</version>
        <scope>system</scope>
        <systemPath>${basedir}/lib/commons-utils.jar</systemPath>
    </dependency>
Frederic Morin
fuente
44
¿Puedo depender de otro archivo pom en lugar de un jar?
Jayen
45

En realidad, al investigar esto, creo que todas estas respuestas son incorrectas. Su pregunta es engañosa debido a nuestro nivel de comprensión de maven. Y digo nuestro porque me acaban de presentar maven.

En Eclipse, cuando desea agregar un archivo jar a su proyecto, normalmente descarga el jar manualmente y luego lo suelta en el directorio lib . Con Maven, no lo haces de esta manera. Esto es lo que haces:

  • Ir al repositorio mvn
  • Busca la biblioteca que deseas agregar
  • Copie la dependencydeclaración en supom.xml
  • reconstruir vía mvn

Ahora, mavense conectará y descargará jarjunto con la lista de dependencias, y resolverá automáticamente cualquier dependencia adicional que jarpueda haber tenido. Entonces, si el jarregistro de bienes comunes también se necesita, también se descargará.

Kieveli
fuente
55
Estoy usando Spring Tool Suite (construido en Eclipse). Después de los pasos 1 y 2 en la solución anterior: 1. Abra pom.xml en el editor STS, haga clic en la pestaña "Dependencias" en la parte inferior 2. Haga clic en "Agregar" en el grupo Dependencias 3. Copie / pegue la información de dependencia de la pestaña "Maven" desde la ventana del navegador ( groupId, artifactId, version) en los campos correspondientes en la ventana emergente "Seleccionar dependencia" en STS 4. Haga clic en Aceptar 5. Guardar pom.xml Una vez guardado, mi directorio maven en el disco duro y la configuración de dependencia maven en STS se actualizan en segundos. Puede editar el .xml directamente, pero usar la herramienta puede ayudar a evitar problemas de formato xml.
Chris R
2
De hecho, esta es la forma preferida de hacer las cosas, pero hay situaciones en las que no se puede hacer eso (por ejemplo, el jar propietario no está en mvnrepository). En ese caso, necesitará una forma de agregarlo "manualmente", en cuyo caso otra respuesta tendría la solución.
Thunderforge
También es posible que la pregunta formulada sea menos una pregunta para principiantes. Puse esto para las personas que buscan hacer algo sin la redacción adecuada que proviene del tiempo dedicado a trabajar con Maven. (Como estaba en ese momento)
Kieveli
BESO Gracias, leí que este es el equivalente de C # Nuget en Java, pero estaba tratando de averiguar en qué botón hacer clic o cmd para ejecutar. No es exactamente un 1: 1 pero hace el trabajo.
Terrance
¿Cómo reconstruir proyecto en maven en intelleJ?
Irfan Nasim
14

Yo haría esto:

  1. agrega la dependencia como quieras en tu pom:

    <dependency>
            <groupId>com.stackoverflow...</groupId>
            <artifactId>artifactId...</artifactId>
            <version>1.0</version>
    </dependency>

  2. ejecutarlo mvn installintentará descargar el jar y fallará. En el proceso, le dará el comando completo de instalación del jar con el mensaje de error. ¡Copia ese comando y ejecútalo! fácil ¿eh?

user40032
fuente
3

Asumiré que está preguntando cómo enviar una dependencia a un "repositorio conocido", y no simplemente preguntando cómo actualizar su POM.

Si es así, entonces esto es lo que quieres leer.

Y para cualquiera que quiera configurar un servidor de repositorio interno, mire aquí (la mitad del problema con el uso de Maven 2 es encontrar los documentos)

kdgregory
fuente
Me gustaría mantener una dependencia yo mismo. Esta es una biblioteca interna.
Milhous