proyecto mvn into agregar java maven libraries mvn-repo

java - mvn - ¿Cómo agregar archivos jar locales a un proyecto de Maven?



agregar jar a proyecto maven netbeans (27)

¿Cómo agrego archivos jar locales (que aún no forman parte del repositorio de Maven) directamente en las fuentes de la biblioteca de mi proyecto?


  1. instalar mvn

Puede escribir el código a continuación en la línea de comandos o si está utilizando eclipse builtin maven, haga clic con el botón derecho en el proyecto -> Ejecutar como -> ejecutar configuraciones ... -> en el panel izquierdo, haga clic derecho en Maven Build -> nueva configuración -> escriba el código en Objetivos y en el directorio base: $ {project_loc: NameOfYourProject} -> Ejecutar

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:

<ruta al archivo>: 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, por ejemplo, -> kaptcha

<versión>: la versión del archivo, por ejemplo, -> 2.3

<embalaje>: el embalaje del archivo, por ejemplo, -> jar

2.Después de instalarlo, simplemente declara jar en pom.xml.

<dependency> <groupId>com.google.code</groupId> <artifactId>kaptcha</artifactId> <version>2.3</version> </dependency>


Agregue su propio archivo JAR local en el archivo POM y úselo en maven build.

mvn install:install-file -Dfile=path-to-jar -DgroupId=owngroupid -DartifactId=ownartifactid -Dversion=ownversion -Dpackaging=jar

Por ejemplo:

mvn install:install-file -Dfile=path-to-jar -DgroupId=com.decompiler -DartifactId=jd-core-java -Dversion=1.2 -Dpackaging=jar

Entonces agréguelo al POM así:


Cree una nueva carpeta, digamos local-maven-repo en la raíz de su proyecto Maven.

Solo agregue un repositorio local dentro de su <project> de su pom.xml :

<repositories> <repository> <id>local-maven-repo</id> <url>file:///${project.basedir}/local-maven-repo</url> </repository> </repositories>

Luego, para cada jar externo que desee instalar, vaya a la raíz de su proyecto y ejecute:

mvn deploy:deploy-file -DgroupId=[GROUP] -DartifactId=[ARTIFACT] -Dversion=[VERS] -Durl=file:./local-maven-repo/ -DrepositoryId=local-maven-repo -DupdateReleaseInfo=true -Dfile=[FILE_PATH]


Creo que una solución mejor para este problema es usar el maven-install-plugin automáticamente los archivos en el momento de la instalación. Así es como lo configuro para mi proyecto.

Primero, agregue la ruta (donde almacena los .jars locales) como una propiedad.

<properties> <local.sdk>/path/to/jar</local.sdk> </properties>

Luego, debajo de los plugins agregue un complemento para instalar los frascos al compilar.

<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-install-plugin</artifactId> <version>2.5.2</version> <executions> <execution> <id>1</id> <phase>initialize</phase> <goals> <goal>install-file</goal> </goals> <configuration> <groupId>com.local.jar</groupId> <artifactId>appengine-api</artifactId> <version>1.0</version> <packaging>jar</packaging> <file>${local.sdk}/lib/impl/appengine-api.jar</file> </configuration> </execution> <execution> <id>appengine-api-stubs</id> <phase>initialize</phase> <goals> <goal>install-file</goal> </goals> <configuration> <groupId>com.local.jar</groupId> <artifactId>appengine-api-stubs</artifactId> <version>1.0</version> <packaging>jar</packaging> <file>${local.sdk}/lib/impl/appengine-api-stubs.jar</file> </configuration> </execution> </executions> </plugin>

Finalmente, en las dependencias, puedes agregar los frascos.

<dependency> <groupId>com.local.jar</groupId> <artifactId>appengine-api</artifactId> <version>1.0</version> </dependency> <dependency> <groupId>com.local.jar</groupId> <artifactId>appengine-api-stubs</artifactId> <version>1.0</version> <scope>test</scope> </dependency>

Al configurar su proyecto de esta manera, el proyecto continuará generándose incluso cuando lo lleve a otra computadora (dado que tiene todos los archivos jar en la ruta especificada por la propiedad local.sdk ).

Para groupId use un nombre único solo para asegurarse de que no haya conflictos.

Ahora, cuando mvn install o mvn test los jars locales se agregarán automáticamente.


ESTA RESPUESTA ES SOLO PARA LOS USUARIOS DE ECLIPSE:

Si está utilizando Eclipse, coloque el jar en lib /, haga clic con el botón derecho en el nombre del jar y haga clic en "agregar a la ruta de compilación". Eclipse creará "bibliotecas referenciadas" y colocará el contenedor por ti

Resolvió la importación del tarro de inmediato en el programa para mí.


En Apache Maven 3.5.4, tuve que agregar una doble cita. Sin doble cita no me funcionó.

ejemplo: mvn install: install-file "-Dfile = ubicación al archivo jar" "-DgroupId = group id" "-DartifactId = artifact id" "-Dversion = version" "-Dpackaging = package type"


En primer lugar, me gustaría dar crédito por esta respuesta al usuario anónimo de (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 una dependencia es crear un repositorio local. Tal repo no es otra cosa que una estructura de directorio adecuada con archivos pom en ella.

En mi ejemplo: tengo un proyecto maestro en la ubicación ${master_project} y subroject1 está en ${master_project}/${subproject1}

entonces estoy creando un repositorio mvn en: ${master_project}/local-maven-repo

En el archivo pom en el subproyecto1, se debe especificar el repositorio ${master_project}/${subproject1}/pom.xml que tomaría la ruta del archivo como un parámetro 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 tu repositorio pom sea independiente. Por ejemplo, una vez que el frasco deseado esté disponible en maven central, solo debe 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 como aquí:

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

El archivo jar de Onece está instalado, por lo que el repositorio mvn puede comprometerse con el repositorio de códigos y toda la configuración es independiente del sistema. ( ejemplo de trabajo en github )

Estoy de acuerdo en que tener JARs comprometidos con el código fuente repo no es una buena práctica, pero en la vida real, la solución rápida y sucia a veces es mejor que el repo nexus completo para alojar un contenedor que no puede publicar.


En su repositorio local puede instalar su jar emitiendo los comandos

mvn install:install-file -Dfile=<path-to-file> -DgroupId=<group-id> / -DartifactId=<artifact-id> -Dversion=<version> -Dpackaging=<packaging>

Siga este link útil para hacer lo mismo desde el sitio web de mkyoung. También puede consultar la guía de expertos para el mismo


Esta es una sintaxis corta para las versiones más nuevas:

mvn install:install-file -Dfile=<path-to-file>

Funciona cuando el JAR fue construido por Apache Maven, el caso más común. Luego contendrá un pom.xml en una subcarpeta del directorio META-INF, que se leerá por defecto.

Fuente: http://maven.apache.org/guides/mini/guide-3rd-party-jars-local.html


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:

<ruta al archivo>: 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, por ejemplo, -> kaptcha

<versión>: la versión del archivo, por ejemplo, -> 2.3

<embalaje>: el embalaje del archivo, por ejemplo, -> jar

Reference


La forma preferida sería crear su propio repositorio remoto.

Vea here para más detalles sobre cómo hacerlo. Eche un vistazo a la sección '' Cargar en un repositorio remoto ''.


La forma realmente rápida y sucia es apuntar a un archivo local:

<dependency> <groupId>sample</groupId> <artifactId>com.sample</artifactId> <version>1.0</version> <scope>system</scope> <systemPath>C:/DEV/myfunnylib/yourJar.jar</systemPath> </dependency>

Sin embargo, esto solo se guardará en su máquina (obviamente), ya que compartirlo generalmente tiene sentido utilizar un archivo m2 adecuado (nexo / artefacto) o si no tiene ninguno de estos o no desea configurar uno. archivo estructurado y configure un "repositorio" en su pom: local:

<repositories> <repository> <id>my-local-repo</id> <url>file://C:/DEV//mymvnrepo</url> </repository> </repositories>

remoto:

<repositories> <repository> <id>my-remote-repo</id> <url>http://192.168.0.1/whatever/mavenserver/youwant/repo</url> </repository> </repositories>

Para esto también es posible una ruta relativa usando la variable basedir:

<url>file:${basedir}</url>


Me gustaría esa solución - usar maven-install-plugin en el archivo pom:

<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-install-plugin</artifactId> <version>2.5.2</version> <executions> <execution> <phase>initialize</phase> <goals> <goal>install-file</goal> </goals> <configuration> <file>lib/yourJar.jar</file> <groupId>com.somegroup.id</groupId> <artifactId>artefact-id</artifactId> <version>x.y.z</version> <packaging>jar</packaging> </configuration> </execution> </executions> </plugin>

En este caso, puede realizar la mvn initialize y el jar se instalará en el repositorio local de maven. Ahora, esta jarra está disponible durante cualquier paso de maven en esta máquina (no olvide incluir esta dependencia como cualquier otra dependencia de maven en pom con la etiqueta <dependency></dependency> ). También es posible vincular jar install para no initialize paso, sino cualquier otro paso que desee.


Otro caso interesante es cuando desea tener en su proyecto frascos de expertos. Es posible que desee mantener las capacidades de Maven para resolver dependencias transitivas. La solución es bastante fácil.

  1. Crea una carpeta libs en tu proyecto.
  2. Agregue las siguientes líneas en su archivo pom.xml

    <properties><local.repository.folder>${pom.basedir}/libs/</local.repository.folder> </properties> <repositories> <repository> <id>local-maven-repository</id> <url>file://${local.repository.folder}</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories>

  3. Abra la carpeta .m2 / repository y copie la estructura de directorios del proyecto que desea importar en la carpeta libs .

Ej. Supongamos que quiere importar la dependencia.

<dependency> <groupId>com.mycompany.myproject</groupId> <artifactId>myproject</artifactId> <version>1.2.3</version> </dependency>

Simplemente vaya a .m2 / repository y verá la siguiente carpeta

es / mycompany / myproject / 1.2.3

Copie todo en su carpeta libs (nuevamente, incluidas las carpetas bajo .m2 / repository ) y listo.


Para instalar un jar de terceros, llame al comando como se muestra a continuación

mvn install:install-file -DgroupId= -DartifactId= -Dversion= -Dpackaging=jar -Dfile=path


Por alguna razón, en la aplicación web a la que le doy mantenimiento, ni la solución de Alireza Fattahi ni la de JJ Roman funcionaron correctamente. En ambos casos, la compilación va bien (ve el frasco), pero el paquete no incluye el frasco dentro de la guerra.

La única forma en que logré hacer que funcionara era poner el frasco en /src/main/webapp/WEB-INF/lib/ y luego combinarlo con la solución de Fattahis o Roman.



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/yourJar.jar</systemPath> </dependency>


Quiero compartir un código donde puedes subir una carpeta llena de frascos. Es útil cuando un proveedor no tiene un repositorio público y necesita agregar muchas bibliotecas manualmente. Decidí crear un .bat en lugar de llamar directamente a maven porque podría haber errores de memoria insuficiente. Fue preparado para un entorno Windows, pero es fácil de adaptarlo a Linux OS:

import java.io.File; import java.io.IOException; import java.io.PrintWriter; import java.util.Date; import java.util.jar.Attributes; import java.util.jar.JarFile; import java.util.jar.Manifest; public class CreateMavenRepoApp { private static final String OCB_PLUGIN_FOLDER = "C://your_folder_with_jars"; public static void main(String[] args) throws IOException { File directory = new File(); //get all the files from a directory PrintWriter writer = new PrintWriter("update_repo_maven.bat", "UTF-8"); writer.println("rem "+ new Date()); File[] fList = directory.listFiles(); for (File file : fList){ if (file.isFile()){ String absolutePath = file.getAbsolutePath() ; Manifest m = new JarFile(absolutePath).getManifest(); Attributes attributes = m.getMainAttributes(); String symbolicName = attributes.getValue("Bundle-SymbolicName"); if(symbolicName!=null &&symbolicName.contains("com.yourCompany.yourProject")) { String[] parts =symbolicName.split("//."); String artifactId = parts[parts.length-1]; String groupId = symbolicName.substring(0,symbolicName.length()-artifactId.length()-1); String version = attributes.getValue("Bundle-Version"); String mavenLine= "call mvn org.apache.maven.plugins:maven-install-plugin:2.5.1:install-file -Dfile="+ absolutePath+" -DgroupId="+ groupId+" -DartifactId="+ artifactId+" -Dversion="+ version+" -Dpackaging=jar "; writer.println(mavenLine); } } } writer.close(); } }

Después de ejecutar este main desde cualquier IDE, ejecute update_repo_maven.bat.



También eche un vistazo a ...

<scope>compile</scope>

Dependencias de Maven . Este es el valor predeterminado, pero en algunos casos he encontrado explícitamente la configuración de ese ámbito para que Maven encuentre bibliotecas locales en el repositorio local.


Tenga en cuenta que NO es necesariamente una buena idea usar un repositorio local. Si este proyecto se comparte con otros, todos los demás tendrán problemas y preguntas cuando no funcione, ¡y el contenedor no estará disponible incluso en su sistema de control de código fuente!

Aunque el repositorio compartido es la mejor respuesta, si no puede hacer esto por alguna razón, incrustar el tarro es mejor que un repositorio local. Los contenidos de repo solo locales pueden causar muchos problemas, especialmente con el tiempo.


Tuve el mismo error para un conjunto de dependencias en mi pom.xml resulta que las versiones de las dependencias no se especificaron en el pom.xml y se mencionaron en el repositorio principal. Por alguna razón, los detalles de la versión no se estaban sincronizando con este repositorio. Por lo tanto, ingresé manualmente las versiones usando la etiqueta y funcionó a la perfección. Se necesitaba un poco de tiempo para buscar las versiones en el padre y especificar aquí. Pero esto se puede hacer solo para los frascos que muestran el error de artefactos y funciona. Espero que esto ayude a alguien.


Tuve el mismo problema con ojdbc6. Vi este enlace pero, no funcionó. El comando era correcto pero necesitaba un parámetro más,

Este es el enlace: http://roufid.com/3-ways-to-add-local-jar-to-maven-project/

Aquí está el ejemplo:

install:install-file -Dfile=C:/driversDB/ojdbc6.jar -DgroupId=com.oracle -DartifactId=ojdbc6 -Dversion=11.2.0.3 -Dpackaging=jar


Una forma es subirlo a su propio administrador de repositorios de Maven (como Nexus). Es una buena práctica tener un administrador de repositorio propio de todos modos.

Otra buena manera que he visto recientemente es incluir el complemento de instalación de Maven en el ciclo de vida de su compilación: declara en el POM que instale los archivos en el repositorio local. Es una pequeña pero pequeña sobrecarga y ningún paso manual involucrado.

http://maven.apache.org/plugins/maven-install-plugin/install-file-mojo.html


línea de comando :

mvn install:install-file -Dfile=c:/kaptcha-{version}.jar -DgroupId=com.google.code -DartifactId=kaptcha -Dversion={version} -Dpackaging=jar


<dependency> <groupId>group id name</groupId> <artifactId>artifact name</artifactId> <version>version number</version> <scope>system</scope> <systemPath>jar location</systemPath> </dependency>