Son mis primeros días aprendiendo Maven y todavía estoy luchando con lo básico. Tengo un archivo .jar externo (no disponible en los repositorios públicos) al que necesito hacer referencia en mi proyecto y estoy tratando de descubrir cuál es mi mejor opción.
Es un proyecto a pequeña escala sin un repositorio central para bibliotecas, por lo que tiene que ser un repositorio local (de alguna manera agregado al control de origen, ¿no sabe si se supone que funciona de esa manera?) O el .jar debe almacenarse en disco fuera de cualquier repositorio formal.
1) ¿Cuál es mi mejor opción para agregar el archivo .jar a las referencias de mi proyecto con maven dado que quiero que tanto el proyecto como la biblioteca estén en control de la fuente?
2) Todavía parece que Eclipse no puede ver la dependencia. Lo agregué manualmente a la sección del pom, y se muestra bien en la lista de Dependencias en m2eclipse. La compilación mvn y el paquete mvn tienen éxito, pero la ejecución del programa da como resultado:
Exception in thread "main" java.lang.Error: Unresolved compilation problems:
LibraryStuff cannot be resolved to a type
Esto es después de editar el POM como:
<dependency>
<groupId>stuff</groupId>
<artifactId>library</artifactId>
<version>1.0</version>
<systemPath>${lib.location}/MyLibrary.jar</systemPath>
<scope>system</scope>
</dependency>
¿Debería ejecutar mvn install: install-file, incluso si ya tengo el pom.xml editado como se indica arriba?
¡Gracias!
mvn install::install-file
: mkyong.com/maven/…mvn install::install-file
en su repositorio local significaría que cualquiera que clone su código fuente también tendría que hacer este paso manual. De lo contrario, la construcción se rompe fuera de la cajaPuede crear un repositorio en el proyecto, para que no tenga que hacerlo
run mvn install:install-file
cada vez que trabaje en una computadora nueva/groupId/artifactId/version/artifactId-verion.jar
detalle lea esta publicación de blog
https://web.archive.org/web/20121026021311/charlie.cu.cc/2012/06/how-add-external-libraries-maven
fuente
mvn install:install-file
y luego copiar toda la estructura de directorios de su repositorio local a su repositorio dentro del proyecto.Esto se puede lograr fácilmente utilizando el elemento <scope> anidado dentro del elemento <dependency>.
Por ejemplo:
Referencia: http://www.tutorialspoint.com/maven/maven_external_dependencies.htm
fuente
install
objetivo en el proyecto dependiente. Ofc tener un sistema con espacio de aire y tener todos los complementos, excepto el complemento de instalación, es una situación bastante rara."The POM for … is missing, no dependency information available” even though it exists in Maven Repository
El manual de Maven dice hacer esto:
fuente
Actualización Desde entonces, acabamos de instalar nuestro propio servidor Nexus, mucho más fácil y limpio.
En nuestra empresa teníamos algunos frascos que teníamos frascos que eran comunes pero que no estaban alojados en ningún repositorio Maven, ni queríamos tenerlos en el almacenamiento local. Creamos un repositorio mvn (público) muy simple en Github (pero puede alojarlo en cualquier servidor o localmente):
tenga en cuenta que esto solo es ideal para administrar algunos archivos jar raramente cambiantes
Crear repositorio en GitHub:
https://github.com/<user_name>/mvn-repo/
Agregar repositorio en pom.xml
(Tenga en cuenta que el archivo sin formato de la ruta completa será un poco diferente al nombre del repositorio)
Agregar dependencia al host (Github o servidor privado)
a. Todo lo que necesita saber es que los archivos se almacenan en el patrón mencionado por @glitch
/groupId/artifactId/version/artifactId-version.jar
b. En su host, cree las carpetas para que coincidan con este patrón.
es decir, si tiene un archivo jar llamado
service-sdk-0.0.1.jar
, cree la carpetaservice-sdk/service-sdk/0.0.1/
y coloque el archivo jarservice-sdk-0.0.1.jar
en él.C. Pruébelo intentando descargar el jar desde un navegador (en nuestro caso:
https://github.com/<user_name>/mvn-repo/raw/master/service-sdk/service-sdk/0.0.1/service-sdk-0.0.1.jar
Agregue dependencia a su archivo pom.xml:
Disfrutar
fuente
No uses systemPath. Al contrario de lo que la gente ha dicho aquí, puede colocar un jar externo en una carpeta debajo de su directorio de proyecto desprotegido y hacer que Maven lo encuentre como otras dependencias. Aquí hay dos pasos cruciales:
Es bastante sencillo y puede encontrar un ejemplo paso a paso aquí: http://randomizedsort.blogspot.com/2011/10/configuring-maven-to-use-local-library.html
fuente
Manera Maven de agregar frascos no Maven al proyecto Maven
Proyecto Maven y jarras no Maven
Agregue los complementos de instalación de Maven en su sección de compilación
Agregar la dependencia
Referencias Nota Soy el propietario del blog.
fuente
Si encuentra el mismo problema y está utilizando spring-boot v1.4 + , puede hacerlo de esta manera.
Hay un includeSystemScope que puede usar para agregar dependencias del alcance del sistema al jar.
p.ej
Estoy usando el controlador Oracle en mi proyecto.
luego haga includeSystemScope = true para incluir el jar en la ruta / BOOT-INF / lib / **
y excluir del recurso para evitar la inclusión duplicada, el frasco es lo suficientemente gordo ~
¡Buena suerte!
fuente
Cambia tu ruta del sistema .
fuente
El pom.xml buscará en su repositorio local para tratar de encontrar la dependencia que coincida con su artefacto. Además, en realidad no debería usar el alcance del sistema o los atributos de systemPath, estos normalmente están reservados para cosas que están en el JDK y no en el JRE
Consulte esta pregunta para saber cómo instalar artefactos maven.
fuente
Tenga en cuenta que todos los ejemplos que usan
requiere exterior
etiquetas adjuntas. No está claro en algunos de los ejemplos.
fuente
La mejor solución aquí es instalar un repositorio: Nexus o Artifactory. Si te da un lugar para colocar cosas como esta, y además acelera las cosas almacenando en caché tus cosas desde el exterior.
Si lo que está tratando es de código abierto, también puede considerar ponerlo en el centro.
Ver la guía .
fuente
Con Eclipse Oxygen puede hacer las siguientes cosas:
Maven los tomará al instalar el proyecto.
fuente
Si el jar externo es creado por un proyecto de Maven solamente, entonces puede copiar todo el proyecto en su sistema y ejecutar un
en el directorio del proyecto. Esto agregará el jar al directorio .m2 que es el repositorio local de Maven.
Ahora puedes agregar el
Esto asegurará que usted
trabajos. Si usa sugerido aquí
Luego tendrá que agregar clases individualmente mientras usa la ejecución a través de la línea de comando.
Puede agregar los frascos externos con el siguiente comando que se describe aquí
fuente
La forma más eficiente y limpia de resolver este problema es mediante el uso de paquetes Github
Cree un repositorio público / privado vacío simple en GitHub según sus requisitos, ya sea que desee que su jar externo se aloje públicamente o no.
Ejecute debajo del comando maven para desplegar su jar externo en el repositorio github creado anteriormente
mvn deploy:deploy-file \ -DgroupId= your-group-id \ -DartifactId= your-artifact-id \ -Dversion= 1.0.0 -Dpackaging= jar -Dfile= path-to-file \ -DrepositoryId= id-to-map-on-server-section-of-settings.xml \ -Durl=https://maven.pkg.github.com/github-username/github-reponame-created-in-above-step
El comando anterior desplegará tu jar externo en el repositorio de GitHub mencionado en
-Durl=
. Puede consultar este enlace en Cómo implementar dependencias como paquetes de GitHub Tutorial de implementación de paquetes de GitHubDespués de eso, puede agregar la dependencia usando
groupId
,artifactId
yversion
mencionado en el paso anterior en mavenpom.xml
y ejecutarmvn install
Maven buscará la dependencia del jar externo del registro de paquetes GitHub y lo proporcionará en su proyecto maven.
Para que esto funcione, también necesitará configurar sus maven's
settings.xml
para que se obtengan del registro del paquete GitHub.fuente