Solución:
Puede agregar dependencias locales directamente (como se menciona en el proyecto build maven con bibliotecas de propiedad incluidas) de esta manera:
<dependency>
<groupId>com.sample</groupId>
<artifactId>sample</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/Name_Your_JAR.jar</systemPath>
</dependency>
Actualizar
En las nuevas versiones, esta función está marcada como obsoleta, pero sigue funcionando y aún no se ha eliminado (solo verá una advertencia en el registro durante el inicio de maven). Se plantea un problema en el grupo maven sobre este https://issues.apache.org/jira/browse/MNG-6523 (puede participar y describir por qué esta función es útil en algunos casos). ¡Espero que esta característica permanezca ahí!
Si me está preguntando, siempre que la función no se elimine, lo uso para hacer dependencia a solo uno archivo de tarro travieso en mi proyecto que no cabe en el repositorio. Si se elimina esta función, bueno, ¡hay muchas buenas respuestas aquí que puedo elegir más adelante!
Instale el JAR en su repositorio local de Maven de la siguiente manera:
mvn install:install-file
-Dfile=<path-to-file>
-DgroupId=<group-id>
-DartifactId=<artifact-id>
-Dversion=<version>
-Dpackaging=<packaging>
-DgeneratePom=true
Donde cada uno se refiere a:
<path-to-file>
: la ruta al archivo para cargar, por ejemplo → c:kaptcha-2.3.jar
<group-id>
: el grupo en el que se debe registrar el archivo, por ejemplo → com.google.code
<artifact-id>
: el nombre del artefacto para el archivo, p. ej. → kaptcha
<version>
: la versión del archivo, p. ej. → 2.3
<packaging>
: el empaquetado del archivo, por ejemplo → jar
Referencia
- Preguntas frecuentes de Maven: tengo un frasco que quiero poner en mi repositorio local. ¿Cómo puedo copiarlo?
- Uso del complemento de instalación de Maven:
install:install-file
objetivo
En primer lugar, me gustaría dar crédito por esta respuesta a un usuario anónimo de Stack Overflow; estoy bastante seguro de que he visto una respuesta similar aquí antes, pero ahora no puedo encontrarla.
La mejor opción para tener archivos JAR locales como dependencia es crear un repositorio Maven local. Dicho repositorio no es más que una estructura de directorio adecuada con archivos pom.
Para mi ejemplo: tengo mi proyecto maestro en ${master_project}
la ubicación y el subproyecto1 está activado ${master_project}/${subproject1}
.
Luego creo un repositorio de Maven en:
${master_project}/local-maven-repo
.
En el archivo pom del subproyecto1 ubicado en ${master_project}/${subproject1}/pom.xml
, se debe especificar el repositorio que tomaría la ruta del archivo como parámetro de URL:
<repositories>
<repository>
<id>local-maven-repo</id>
<url>file:///${project.parent.basedir}/local-maven-repo</url>
</repository>
</repositories>
La dependencia se puede especificar como para cualquier otro repositorio. Esto hace que su repositorio pom sea independiente. Por ejemplo, una vez que el JAR deseado esté disponible en Maven central, solo necesita eliminarlo de su repositorio local y se extraerá del repositorio predeterminado.
<dependency>
<groupId>org.apache.felix</groupId>
<artifactId>org.apache.felix.servicebinder</artifactId>
<version>0.9.0-SNAPSHOT</version>
</dependency>
Lo último, pero no menos importante, es agregar el archivo JAR al repositorio local usando el interruptor -DlocalRepositoryPath así:
mvn org.apache.maven.plugins:maven-install-plugin:2.5.2:install-file
-Dfile=/some/path/on/my/local/filesystem/felix/servicebinder/target/org.apache.felix.servicebinder-0.9.0-SNAPSHOT.jar
-DgroupId=org.apache.felix -DartifactId=org.apache.felix.servicebinder
-Dversion=0.9.0-SNAPSHOT -Dpackaging=jar
-DlocalRepositoryPath=${master_project}/local-maven-repo
Una vez que se instala el archivo JAR, su repositorio de Maven se puede enviar a un repositorio de código, y toda la configuración es independiente del sistema. (Ejemplo de trabajo en GitHub).
Estoy de acuerdo en que tener JAR comprometidos con el repositorio de código fuente no es una buena práctica, pero en la vida real, las soluciones rápidas y sucias a veces son mejores que un repositorio Nexus completo para alojar un JAR que no se puede publicar.