Maven: ¿la mejor manera de vincular el JAR externo personalizado a mi proyecto?

Es mi primer par de días aprendiendo Maven y todavía estoy luchando con lo básico. Tengo un archivo .jar externo (no disponible en los repositorys 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 de pequeña escala sin un repository central para bibliotecas, por lo que tiene que ser un repository local (de alguna manera agregado al control de fuente, ¿no sabe si se supone que debe funcionar de esa manera?) O el .jar necesita almacenarse en disco fuera de cualquier repository formal.

1) ¿Cuál es mi mejor opción para agregar el archivo .jar a las referencias de mi proyecto con Maven dado que deseo que tanto el proyecto como la biblioteca estén en control de fuente?

2) Todavía no puedo hacer que Eclipse vea la dependencia. Lo agregué manualmente a la sección del pom, y se muestra bien en la lista Dependencias en m2eclipse. mvn compile y mvn package tienen éxito, pero ejecutar los resultados del progtwig en:

Exception in thread "main" java.lang.Error: Unresolved comstacktion problems: LibraryStuff cannot be resolved to a type 

Esto es después de editar el POM como:

  stuff library 1.0 ${lib.location}/MyLibrary.jar system  

¿Debo ejecutar mvn install: install-file aunque ya haya editado el pom.xml como se indica arriba?

¡Gracias!

Creo que deberías usar mvn install:install-file para rellenar tu repository local con los mvn install:install-file la biblioteca, entonces debes cambiar el scope del sistema para comstackrlo.

Si está comenzando con maven, le sugiero que use maven directamente, no los complementos IDE, ya que agrega una capa adicional de complejidad.

En cuanto al error, ¿pones los jar requeridos en tu classpath? Si usa tipos de la biblioteca, también debe tener acceso al mismo en tiempo de ejecución. Esto no tiene nada que ver con maven mismo.

No entiendo por qué quieres poner la biblioteca a control de fuente: es para código de fuente, no para archivos binarios.

Puede crear un Repositorio de In Project, para que no tenga que run mvn install:install-file cada vez que trabaje en una nueva computadora

  in-project In Project Repo file://${project.basedir}/libs   dropbox dropbox-sdk 1.3.1  

/groupId/artifactId/version/artifactId-verion.jar

detalle leer esta publicación en el blog

http://charlie.cu.cc/2012/06/how-add-external-libraries-maven/

El manual de Maven dice que haga esto:

 mvn install:install-file -Dfile=non-maven-proj.jar -DgroupId=some.group -DartifactId=non-maven-proj -Dversion=1 -Dpackaging=jar 

actualización Desde entonces, hemos instalado nuestro propio servidor Nexus, mucho más fácil y limpio.

En nuestra empresa teníamos algunos flasks que teníamos algunos flasks comunes pero que no estaban alojados en ningún repository de maven, ni queríamos tenerlos en el almacenamiento local. Creamos un repository de mvn (público) muy simple en Github (pero puedes alojarlo en cualquier servidor o localmente):
Tenga en cuenta que esto solo es ideal para administrar unos pocos archivos jar que rara vez cambian

  1. Crear repository en GitHub:
    https://github.com//mvn-repo/

  2. Agregar repository en pom.xml
    (Tenga en cuenta que el archivo de ruta completa será un poco diferente del nombre del repository)

      project-common Project Common https://github.com//mvn-repo/raw/master/  
  3. 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
    segundo. 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 carpeta service-sdk/service-sdk/0.0.1/ y coloque el archivo jar service-sdk-0.0.1.jar en él.
    do. Pruébelo tratando de descargar el contenedor desde un navegador (en nuestro caso: https://github.com//mvn-repo/raw/master/service-sdk/service-sdk/0.0.1/service-sdk-0.0.1.jar

  4. Agregue dependencia a su archivo pom.xml:

      service-sdk service-sdk 0.0.1  
  5. Disfrutar

Esto se puede lograr fácilmente utilizando el elemento nested dentro del elemento .

Por ejemplo:

    ldapjdk ldapjdk system 1.0 ${basedir}\src\lib\ldapjdk.jar   

Referencia: http://www.tutorialspoint.com/maven/maven_external_dependencies.htm

No use SystemPath. Contrariamente a lo que la gente ha dicho aquí, puedes poner un contenedor externo en una carpeta debajo del directorio de proyecto de tu check-out y que Maven lo encuentre como otras dependencias. Aquí hay dos pasos cruciales:

  1. Use “mvn install: install-file” con -DlocalRepositoryPath.
  2. Configure un repository para que apunte a esa ruta en su POM.

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

Cambie su SystemPath .

  stuff library 1.0 ${project.basedir}/MyLibrary.jar system  

Maven forma de agregar jarras no maven al proyecto maven

Proyecto Maven y jarras no maven

Agregue los plugins de instalación maven en su sección de construcción

  org.apache.maven.plugins maven-install-plugin ${version.maven-install-plugin}   install-external-non-maven1-jar clean  default jar1.group non-maven1 ${version.non-maven1} ${project.basedir}/libs/non-maven1.jar jar true   install-file    install-external-non-maven2-jar clean  default jar2.group non-maven2 ${version.non-maven2} ${project.basedir}/libs/non-maven2.jar jar true   install-file    install-external-non-maven3-jar clean  default jar3.group non-maven3 ${version.non-maven3} ${project.basedir}/libs/non-maven3.jar jar true   install-file     

Agrega la dependencia

   jar1.group non-maven1 ${version.non-maven1}   jar2.group non-maven2 ${version.non-maven2}   jar3.group non-maven3 ${version.non-maven3}   

Nota de referencias Soy el dueño del blog

El pom.xml buscará en su repository local para tratar de encontrar la dependencia que coincida con su artefacto. Además, en realidad no deberías estar usando el scope 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 sobre cómo instalar artefactos de maven.

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 de scope de sistema al jar.

p.ej

Estoy usando el controlador de Oracle en mi proyecto.

  com.oracle ojdbc14 10.2.0.3.0 system ${project.basedir}/src/main/resources/extra-jars/ojdbc14-10.2.0.3.0.jar  

luego haga includeSystemScope = true para incluir el jar en la ruta / BOOT-INF / lib / **

  org.springframework.boot spring-boot-maven-plugin  true   

y excluir del recurso para evitar la inclusión duplicada, el contenedor es lo suficientemente gordo ~

  src/test/java   src/main/resources  **/*.jar     

¡Buena suerte!

La mejor solución aquí es instalar un repository: Nexus o Artifactory. Si te da un lugar para poner cosas como esta, y además acelera las cosas almacenando tus cosas desde el exterior.

Si la cosa con la que estás tratando es de código abierto, también podrías considerar ingresar en el centro.

Ver la guía

Tenga en cuenta que todos los ejemplos que usan

 ... 

requiere exterior

 ... 

tags adjuntas. No está claro a partir de algunos de los ejemplos.

Si el jar externo es creado por un proyecto de Maven solo entonces puedes copiar el proyecto completo en tu sistema y ejecutar un

 mvn install 

en el directorio del proyecto. Esto agregará el jar al directorio .m2 que es el repository maven local.

Ahora puedes agregar el

  copy-from-the=maven-pom-of-existing-project copy-from-the=maven-pom-of-existing-project copy-from-the=maven-pom-of-existing-project  

Esto asegurará que

 mvn exec:java 

trabajos. Si usas sugerido aquí

 system 

Luego, deberá agregar clases individualmente mientras usa la ejecución a través de la línea de comando.

Puede agregar los archivos jar externos mediante el siguiente comando que se describe aquí

 mvn install:install-file -Dfile= -DgroupId= \ -DartifactId= -Dversion= -Dpackaging= 

Con Eclipse Oxygen puedes hacer lo siguiente:

  1. Coloque sus bibliotecas en WEB-INF / lib
  2. Proyecto -> Configurar ruta de comstackción -> Agregar biblioteca -> Biblioteca de aplicaciones web

Maven los llevará al instalar el proyecto.