Las instrucciones para instalar en mi compilación tenían todo excepto la parte generatePom. Eso parece ser crucial.
Jason D
44
<path-to-file> ¿qué significa? Como C: /Users/XXX/WorkspaceDocx/maven/src/main/resources/myJar.jar ...... o podemos hacer $ {project.basedir} /src/main/resources/myJar.jar
Igor Beaufils
17
La respuesta no menciona un LÉAME o que traen los frascos. Sin embargo, si el proyecto trae los frascos, entonces también podría poner el repositorio en el proyecto como se menciona aquí stackoverflow.com/a/36602256/1000011, entonces no necesita un LÉAME ya que el proyecto funcionará como si los frascos estaban en maven central sin ningún paso manual adicional.
opticyclic
8
@opticyclic su comentario necesita más votos a favor, o esta respuesta debe editarse. Es una receta para el desastre para los novatos que no se dan cuenta de que la instalación en el repositorio local de Maven no incluiría a todos los demás.
En las nuevas versiones, esta característica está marcada como obsoleta pero aún funciona 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 allí!
Si me está preguntando, siempre y cuando la característica no se elimine, lo uso para hacer que solo dependa de un archivo jar travieso en mi proyecto que no se ajusta al repositorio. Si se elimina esta característica, bueno, ¡hay muchas buenas respuestas aquí que puedo elegir más adelante!
Hay momentos en los que desea probar específicamente un frasco viejo, por ejemplo, y creo que esta respuesta es una buena opción para eso. Es el que necesitaba. Upvoted
John Lockwood
36
Tan agradable y fácil como parece, esta solución tiene el problema de que yourJar.jar no se incluirá en un archivo WAR para su aplicación.
Matthias
40
La solución anterior ya no funciona, devuelve: "'dependencies.dependency.systemPath' para xx.jar no debe apuntar a archivos dentro del directorio del proyecto" Esto ya se ha tratado en stackoverflow.com/questions/10935135/…
sarah .ferguson
8
En esta respuesta, no son el artifactIdy groupIdal revés?
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 local de Maven. Tal repositorio no es más que una estructura de directorio adecuada con archivos pom.
Para mi ejemplo: tengo mi proyecto maestro en ${master_project}ubicación y el subproyecto1 está activado ${master_project}/${subproject1}.
Luego de crear un repositorio Maven en:
${master_project}/local-maven-repo.
En el archivo pom en el subproyecto1 ubicado en ${master_project}/${subproject1}/pom.xml, se debe especificar el repositorio que tomaría la ruta del archivo como un parámetro de URL:
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.
Una vez que se instala el archivo JAR, su repositorio de Maven puede comprometerse 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 puede publicar.
Esta es la única respuesta correcta aquí, ya que creará su repositorio correctamente al usar la implementación.
opticyclic
¿Funcionaría este enfoque si el código se implementa utilizando un servidor de compilación de CI? Parece que las compilaciones automatizadas no tendrían acceso a la dependencia.
Wallace Howery
2
@ user2748659 sí, si en sus servidores de compilación de CI la carpeta local-maven-repoestá incluida (como un hijo en este ejemplo) en su carpeta de origen
Anthony O.
3
Esta respuesta es lo que funcionó para mí. Para un proyecto compartido, tener el repositorio en el directorio del proyecto y agregarlo al control de versión asegura que cualquier persona que revise el proyecto no tendrá dependencias faltantes. Si tiene muchas dependencias, entonces un repositorio remoto compartido es probablemente una mejor solución, de lo contrario, mantener el repositorio en el directorio del proyecto está perfectamente bien.
Aquarelle
2
Tenga en cuenta que para hacer esto puede que necesite agregar -Dpackaging = jar. De lo contrario, aparece "la información del artefacto está incompleta o no es válida: falta el paquete".
J Woodchuck
43
Me gustaría tal solución: usar maven-install-pluginen el archivo pom:
En este caso, puede realizar mvn initializey jar se instalará en el repositorio local de Maven. Ahora este jar 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 <dependency></dependency>etiqueta). También es posible vincular la instalación de jar no al initializepaso, sino a cualquier otro paso que desee.
Esto funciona bien para mí, pero solo si ejecuto mvn initializeantes mvn package: no puedo mvn initialize packageo intenta descargar el JAR desde el repositorio central. ¿Por qué es esto? Pensé que ejecutaría estos objetivos / fases en orden.
DavidS
1
En realidad, deben ejecutarse en orden. Eche un vistazo a la lista del ciclo de vida predeterminado: maven.apache.org/guides/introduction/… . Puede usar otro paso para enlazar.
sphinks
2
Probé todos los métodos, pero al final tuve que recurrir a esta solución. La razón principal es que quería poder construir localmente los paquetes en modo fuera de línea. Si lo declaraba como una dependencia con un repositorio definido localmente, esto siempre se consideraba como otro repositorio en línea y la compilación de Maven se quejaba de no multar el artefacto. Esta solución funciona bien para cada caso.
Mauli
2
Creo que es mejor usar la fase limpia porque la inicialización se ejecutará cada vez que usemos el paquete mvn cuando sea innecesario. Finalmente, si solo necesitamos generar el jar / war, podemos usar directamente mvn clean package .
Deoxyseia
" También es posible vincular la instalación de jar no para inicializar el paso, pero cualquier otro paso que desee " no es necesariamente cierto. Si la dependencia aún no está en el repositorio y se utiliza una fase que viene después de una fase que resuelve dependencias (por ejemplo compile), la compilación fallará.
GeroldBroser reintegra a Mónica
29
<dependency><groupId>group id name</groupId><artifactId>artifact name</artifactId><version>version number</version><scope>system</scope><systemPath>jar location</systemPath></dependency>
Sin embargo, esto solo vivirá en su máquina (obviamente), para compartirlo generalmente tiene sentido usar un archivo m2 adecuado (nexus / artefacto) o si no tiene ninguno de estos o no desea configurar uno para un experto local. archivo estructurado y configurar un "repositorio" en su pom: local:
Recibo un error Error al instalar el artefacto (acceso denegado). ¿Como puedo resolver esto? @Aurasphere
Ramzah Rehman
1
@RamzahRehman intente abrir el símbolo del sistema con privilegios de admi haciendo clic derecho y luego seleccionando "Ejecutar como administrador"
Aurasphere
9
Una forma es subirlo a su propio administrador de repositorio 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 su ciclo de vida de compilación: declara en el POM que instala los archivos en el repositorio local. Es una sobrecarga pequeña pero pequeña y no implica ningún paso manual.
Termine con el cambio a gradle. No funciona Si el jar local se define como dependencias, maven no ejecutará complementos antes de resolver las dependencias, es inevitable una instalación manual. encontró una discusión sobre esta situación: stackoverflow.com/questions/5951999/…
xinthink
7
Por supuesto, puede agregar frascos a esa carpeta. Pero tal vez no sea lo que quieres lograr ...
Otro caso interesante es cuando desea tener en su proyecto jarras privadas de Maven. Es posible que desee mantener las capacidades de Maven para resolver dependencias transitivas. La solución es bastante fácil.
Crea una carpeta libs en tu proyecto
Agregue las siguientes líneas en su archivo pom.xml
Creo que una mejor solución para este problema es usar maven-install-plugin para instalar automáticamente los archivos en el momento de la instalación. Así es como lo configuré para mi proyecto.
Primero, agregue la ruta (donde almacena los .jars locales) como una propiedad.
Al configurar su proyecto de esta manera, el proyecto continuará desarrollándose incluso cuando lo lleve a otra computadora (dado que tiene todos los archivos jar en la ruta especificada por la propiedad local.sdk).
por groupId usar un nombre único solo para asegurarse de que no haya conflictos.
Ahora cuando usted mvn installo mvn testlos frascos locales se agregarán automáticamente.
Quiero compartir un código donde puedes subir una carpeta llena de tarros. Es útil cuando un proveedor no tiene un repositorio público y necesita agregar muchas bibliotecas manualmente. Decidí construir un .bat en lugar de llamar directamente a maven porque podría haber errores de falta de memoria. Fue preparado para un entorno Windows, pero es fácil adaptarlo al sistema operativo Linux:
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;publicclassCreateMavenRepoApp{privatestaticfinalString OCB_PLUGIN_FOLDER ="C://your_folder_with_jars";publicstaticvoid main(String[] args)throwsIOException{File directory =newFile();//get all the files from a directoryPrintWriter writer =newPrintWriter("update_repo_maven.bat","UTF-8");
writer.println("rem "+newDate());File[] fList = directory.listFiles();for(File file : fList){if(file.isFile()){String absolutePath = file.getAbsolutePath();Manifest m =newJarFile(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.
Su código String symbolicName = attributes.getValue("Bundle-SymbolicName"); if(symbolicName!=null &&symbolicName.contains("com.yourCompany.yourProject"))parece indicar que solo se admitirán jarras personalizadas . Eso no es lo que necesitamos: en cambio, un montón de frascos de terceros. ¿Tiene sugerencias sobre cómo instalar cualquier jar de esta manera?
javadba
He arreglado tu código: pongo una respuesta en la parte inferior.
Java
3
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á de manera predeterminada.
Dependencias de Maven . Este es el valor predeterminado, pero en algunos casos he encontrado explícitamente que ese alcance también Maven encuentre bibliotecas locales en el repositorio local.
Por alguna razón, en la aplicación web a la que le estoy dando mantenimiento, ni la solución de Alireza Fattahi ni la solución de JJ Roman funcionaron correctamente. En ambos casos, la compilación funciona bien (ve el frasco), pero el empaque no incluye el frasco dentro de la guerra.
La única forma en que pude hacerlo funcionar fue poniendo el frasco /src/main/webapp/WEB-INF/lib/y luego combinándolo con la solución de Fattahis o Roman.
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 jar no estará disponible incluso en su sistema de control de fuente!
Aunque el repositorio compartido es la mejor respuesta, si no puede hacerlo por alguna razón, entonces incrustar el jar es mejor que un repositorio local. El contenido de repositorios solo local puede causar muchos problemas, especialmente con el tiempo.
Si agrega los archivos jar en el sistema de control de código fuente, las bibliotecas siempre estarán disponibles junto con el código fuente. Sin fuente, sin bibliotecas. Con Maven, en cambio, la fuente podría estar bien, pero el repositorio no está disponible.
sarah.ferguson
@Frank ... ¿alguna idea sobre cómo crear jar ejecutable sin incluir dependencias externas (archivos de biblioteca)?
Satish Karuturi
Para alguien nuevo en Maven, y en busca de una respuesta a la pregunta original, ¿qué significa "incrustar el frasco"?
cdock
1
En su repositorio local, puede instalar su jar emitiendo los comandos
Puede escribir el código a continuación en la línea de comando o si está utilizando eclipse builtin maven, haga clic derecho en 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
Asegúrese de editar la fileruta en función de su ruta de archivo real (se recomienda colocar estos frascos externos no maven dentro de alguna carpeta, digamos lib, y colocar estolib carpeta dentro de su proyecto para usar la ruta relativa específica del proyecto y evitar agregar sistema Ruta absoluta específica.
Si tiene varios frascos externos, solo repita los <execution>otros frascos dentro del mismomaven-install-plugin .
Paso 2: Una vez que haya configurado lo maven-install-pluginque se muestra arriba en su pom.xmlarchivo, debe usar estos frascos en su archivo pom.xmlhabitual:
Tenga en cuenta que maven-install-pluginsolo copia sus frascos externos a su local.m2 repositorio Maven. Eso es. No incluye automáticamente estos frascos como dependencias de Maven para su proyecto.
Es un punto menor, pero a veces es fácil pasarlo por alto.
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 sincronizaban con este repositorio. Por lo tanto, ingresé manualmente las versiones con la etiqueta y funcionó a las mil maravillas. Se necesita 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 artefacto y funciona. Espero que esto ayude a alguien.
Si está utilizando Eclipse, coloque el jar en lib /, haga clic derecho en el nombre del jar y haga clic en "agregar a la ruta de compilación". Eclipse creará una "biblioteca referenciada" y colocará el jar por usted
Resolvió la importación del jar de inmediato en el programa para mí.
Eso agregará la entrada a Eclipse .classpath, pero su compilación de maven mvn packageserá un brocket una vez que comience a usar esa dependencia, ya que maven no tiene una definición de eso, y debería estar solo enpom.xml
Paul Verest
Sí, tienes razón, el paquete no incluirá el jar local. Pero respondí a la pregunta, cómo agregarlo a un proyecto (en forma de eclipse).
install-file
scripts engorrosos de cmd .Respuestas:
Instale el JAR en su repositorio local de Maven de la siguiente manera:
Donde cada uno se refiere a:
<path-to-file>
: la ruta al archivo a 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
<version>
: la versión del archivo, por ejemplo, →2.3
<packaging>
: el paquete del archivo, por ejemplo, →jar
Referencia
install:install-file
objetivofuente
Puede agregar dependencias locales directamente (como se menciona en el proyecto build maven con bibliotecas de propiedad incluidas ) de esta manera:
Actualizar
En las nuevas versiones, esta característica está marcada como obsoleta pero aún funciona 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 allí!
Si me está preguntando, siempre y cuando la característica no se elimine, lo uso para hacer que solo dependa de un archivo jar travieso en mi proyecto que no se ajusta al repositorio. Si se elimina esta característica, bueno, ¡hay muchas buenas respuestas aquí que puedo elegir más adelante!
fuente
artifactId
ygroupId
al revés?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 local de Maven. Tal repositorio no es más que una estructura de directorio adecuada con archivos pom.
Para mi ejemplo: tengo mi proyecto maestro en
${master_project}
ubicación y el subproyecto1 está activado${master_project}/${subproject1}
.Luego de crear un repositorio Maven en:
${master_project}/local-maven-repo
.En el archivo pom en el subproyecto1 ubicado en
${master_project}/${subproject1}/pom.xml
, se debe especificar el repositorio que tomaría la ruta del archivo como un parámetro de URL: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.
Lo último, pero no menos importante, es agregar el archivo JAR al repositorio local utilizando el conmutador -DlocalRepositoryPath de esta manera:
Una vez que se instala el archivo JAR, su repositorio de Maven puede comprometerse 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 puede publicar.
fuente
${project.parent.basedir}
hoy en día no parece resolver nada, usé${project.basedir}/..
y trabajé perfectamente.<mirrorOf>*</mirrorOf>
.Cree una nueva carpeta, digamos
local-maven-repo
en la raíz de su proyecto Maven.Simplemente agregue un repositorio local dentro
<project>
de supom.xml
:Luego, para cada jar externo que desee instalar, vaya a la raíz de su proyecto y ejecute:
fuente
local-maven-repo
está incluida (como un hijo en este ejemplo) en su carpeta de origenMe gustaría tal solución: usar
maven-install-plugin
en el archivo pom:En este caso, puede realizar
mvn initialize
y jar se instalará en el repositorio local de Maven. Ahora este jar 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<dependency></dependency>
etiqueta). También es posible vincular la instalación de jar no alinitialize
paso, sino a cualquier otro paso que desee.fuente
mvn initialize
antesmvn package
: no puedomvn initialize package
o intenta descargar el JAR desde el repositorio central. ¿Por qué es esto? Pensé que ejecutaría estos objetivos / fases en orden.compile
), la compilación fallará.fuente
<scope>system
está en desuso ahora.install:install-file
el artefacto al repositorio local y úselo como una dependencia "normal" (con alcance predeterminadocompile
) o use una solución de repositorio en el proyecto .Sí, puedes tener pero no es buena idea.
En su lugar, instale todos estos frascos en repositorios Maven
Ver también
fuente
La forma realmente rápida y sucia es señalar un archivo local:
Sin embargo, esto solo vivirá en su máquina (obviamente), para compartirlo generalmente tiene sentido usar un archivo m2 adecuado (nexus / artefacto) o si no tiene ninguno de estos o no desea configurar uno para un experto local. archivo estructurado y configurar un "repositorio" en su pom: local:
remoto:
para esto también es posible una ruta relativa utilizando la variable basedir:
fuente
<url>file:${basedir}</url>
como URL base en su lugar.Agregue su propio JAR local en el archivo POM y úselo en la compilación maven.
Por ejemplo:
Luego agréguelo al POM así:
fuente
Una forma es subirlo a su propio administrador de repositorio 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 su ciclo de vida de compilación: declara en el POM que instala los archivos en el repositorio local. Es una sobrecarga pequeña pero pequeña y no implica ningún paso manual.
http://maven.apache.org/plugins/maven-install-plugin/install-file-mojo.html
fuente
Por supuesto, puede agregar frascos a esa carpeta. Pero tal vez no sea lo que quieres lograr ...
Si necesita estos frascos para compilar, consulte esta pregunta relacionada: ¿Puedo agregar frascos a la ruta de clase de compilación de maven 2 sin instalarlos?
Además, antes de que alguien lo sugiera, NO use el alcance del sistema.
fuente
Otro caso interesante es cuando desea tener en su proyecto jarras privadas de Maven. Es posible que desee mantener las capacidades de Maven para resolver dependencias transitivas. La solución es bastante fácil.
Agregue las siguientes líneas en su archivo pom.xml
Abra la carpeta .m2 / repository y copie la estructura de directorios del proyecto que desea importar a la carpeta libs .
Por ejemplo, suponga que desea importar la dependencia
Simplemente vaya a .m2 / repositorio y verá la siguiente carpeta
com / mycompany / myproject / 1.2.3
Copie todo en su carpeta libs (de nuevo, incluidas las carpetas en .m2 / repositorio ) y ya está.
fuente
línea de comando :
fuente
Parte importante en la dependencia es: $ {pom.basedir} (en lugar de solo $ {basedir})
fuente
Creo que una mejor solución para este problema es usar maven-install-plugin para instalar automáticamente los archivos en el momento de la instalación. Así es como lo configuré para mi proyecto.
Primero, agregue la ruta (donde almacena los .jars locales) como una propiedad.
Luego, debajo de
plugins
agregar un complemento para instalar los frascos al compilar.Finalmente, en dependencias, puedes agregar los frascos
Al configurar su proyecto de esta manera, el proyecto continuará desarrollándose incluso cuando lo lleve a otra computadora (dado que tiene todos los archivos jar en la ruta especificada por la propiedad
local.sdk
).por
groupId
usar un nombre único solo para asegurarse de que no haya conflictos.Ahora cuando usted
mvn install
omvn test
los frascos locales se agregarán automáticamente.fuente
La forma preferida sería crear su propio repositorio remoto.
Consulte aquí para obtener detalles sobre cómo hacerlo. Eche un vistazo a la sección ' Carga en un repositorio remoto '.
fuente
Quiero compartir un código donde puedes subir una carpeta llena de tarros. Es útil cuando un proveedor no tiene un repositorio público y necesita agregar muchas bibliotecas manualmente. Decidí construir un .bat en lugar de llamar directamente a maven porque podría haber errores de falta de memoria. Fue preparado para un entorno Windows, pero es fácil adaptarlo al sistema operativo Linux:
Después de ejecutar este main desde cualquier IDE, ejecute update_repo_maven.bat.
fuente
String symbolicName = attributes.getValue("Bundle-SymbolicName"); if(symbolicName!=null &&symbolicName.contains("com.yourCompany.yourProject"))
parece indicar que solo se admitirán jarras personalizadas . Eso no es lo que necesitamos: en cambio, un montón de frascos de terceros. ¿Tiene sugerencias sobre cómo instalar cualquier jar de esta manera?Esta es una sintaxis corta para las versiones más nuevas:
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á de manera predeterminada.
Fuente: http://maven.apache.org/guides/mini/guide-3rd-party-jars-local.html
fuente
También eche un vistazo a ...
Dependencias de Maven . Este es el valor predeterminado, pero en algunos casos he encontrado explícitamente que ese alcance también Maven encuentre bibliotecas locales en el repositorio local.
fuente
Por alguna razón, en la aplicación web a la que le estoy dando mantenimiento, ni la solución de Alireza Fattahi ni la solución de JJ Roman funcionaron correctamente. En ambos casos, la compilación funciona bien (ve el frasco), pero el empaque no incluye el frasco dentro de la guerra.
La única forma en que pude hacerlo funcionar fue poniendo el frasco
/src/main/webapp/WEB-INF/lib/
y luego combinándolo con la solución de Fattahis o Roman.fuente
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 jar no estará disponible incluso en su sistema de control de fuente!
Aunque el repositorio compartido es la mejor respuesta, si no puede hacerlo por alguna razón, entonces incrustar el jar es mejor que un repositorio local. El contenido de repositorios solo local puede causar muchos problemas, especialmente con el tiempo.
fuente
En su repositorio local, puede instalar su jar emitiendo los comandos
Siga este enlace útil para hacer lo mismo desde el sitio web de mkyoung. También puede consultar la guía de Maven para el mismo
fuente
Para instalar jar de terceros, por favor llame al comando como a continuación
fuente
Puede escribir el código a continuación en la línea de comando o si está utilizando eclipse builtin maven, haga clic derecho en 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
Donde cada uno se refiere a:
<ruta-a-archivo>: la ruta al archivo a cargar, por ejemplo -> c: \ kaptcha-2.3.jar
<group-id>: el grupo en el que el archivo debe registrarse, 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
<packaging>: el embalaje del archivo, por ejemplo, -> jar
fuente
Paso 1: Configure el
maven-install-plugin
con el objetivoinstall-file
en supom.xml
Asegúrese de editar la
file
ruta en función de su ruta de archivo real (se recomienda colocar estos frascos externos no maven dentro de alguna carpeta, digamoslib
, y colocar estolib
carpeta dentro de su proyecto para usar la ruta relativa específica del proyecto y evitar agregar sistema Ruta absoluta específica.Si tiene varios frascos externos, solo repita los
<execution>
otros frascos dentro del mismomaven-install-plugin
.Paso 2: Una vez que haya configurado lo
maven-install-plugin
que se muestra arriba en supom.xml
archivo, debe usar estos frascos en su archivopom.xml
habitual:Tenga en cuenta que
maven-install-plugin
solo copia sus frascos externos a su local.m2
repositorio Maven. Eso es. No incluye automáticamente estos frascos como dependencias de Maven para su proyecto.Es un punto menor, pero a veces es fácil pasarlo por alto.
fuente
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 sincronizaban con este repositorio. Por lo tanto, ingresé manualmente las versiones con la etiqueta y funcionó a las mil maravillas. Se necesita 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 artefacto y funciona. Espero que esto ayude a alguien.
fuente
En Apache Maven 3.5.4, tuve que agregar comillas dobles. Sin doble cita no me funcionó.
ejemplo: mvn install: install-file "-Dfile = ubicación del archivo jar" "-DgroupId = identificación del grupo" "-DartifactId = identificación del artefacto" "-Dversion = versión" "-Dpackaging = tipo de paquete"
fuente
fuente
ESTA RESPUESTA ES SOLO PARA USUARIOS DE ECLIPSE:
Si está utilizando Eclipse, coloque el jar en lib /, haga clic derecho en el nombre del jar y haga clic en "agregar a la ruta de compilación". Eclipse creará una "biblioteca referenciada" y colocará el jar por usted
Resolvió la importación del jar de inmediato en el programa para mí.
fuente
.classpath
, pero su compilación de mavenmvn package
será un brocket una vez que comience a usar esa dependencia, ya que maven no tiene una definición de eso, y debería estar solo enpom.xml