Conjunto Maven 2 con dependencias: jar bajo el scope “sistema” no incluido

Estoy usando el complemento maven-assembly para crear un archivo jar de mi aplicación, incluidas sus dependencias de la siguiente manera:

 macosx  tar.gz dir     *:jar  lib    

(He omitido algunas otras cosas que no están relacionadas con la pregunta)

Hasta ahora, esto ha funcionado bien porque crea un directorio lib con todas las dependencias. Sin embargo, recientemente agregué una nueva dependencia cuyo ámbito es system , y no lo copia al directorio de salida lib . Debo estar perdiendo algo básico aquí, así que pido ayuda.

La dependencia que acabo de agregar es:

  sourceforge.jchart2d jchart2d 3.1.0 system ${project.basedir}/external/jchart2d-3.1.0.jar  

La única forma en que pude incluir esta dependencia fue agregando lo siguiente al elemento de ensamblaje:

   external/jchart2d-3.1.0.jar lib   

Sin embargo, esto me obliga a cambiar el pom y el archivo de ensamblaje cada vez que se cambia el nombre de este jar, si es que lo hace alguna vez. Además, parece simplemente incorrecto.

He intentado con runtime en los conjuntos de dependencySets y sourceforge.jchart2d:jchart2d sin suerte.

Entonces, ¿cómo incluir un jar de ámbito de system en su archivo de ensamblaje en maven 2?

Muchas gracias

No me sorprende que las dependencias del scope del sistema no se agreguen (después de todo, las dependencias con un scope del sistema deben proporcionarse explícitamente por definición). En realidad, si realmente no desea poner esa dependencia en su repository local (por ejemplo, porque desea distribuirlo como parte de su proyecto), esto es lo que haría:

  • Colocaría la dependencia en un “repository de sistema de archivos” local al proyecto.
  • Declararía ese repository en mi pom.xml así:

       my file://${basedir}/my-repo   
  • Simplemente declararía el artefacto sin el scope del system , esta es solo una fuente de problemas:

      sourceforge.jchart2d jchart2d 3.1.0  

No estoy 100% seguro de que esto se adapte a sus necesidades, pero creo que es una mejor solución que usar el scope del sistema.

Actualización: debería haber mencionado eso en mi respuesta original y lo estoy arreglando ahora. Para instalar una biblioteca de terceros en el repository basado en archivos, use install:install-file con el parámetro localRepositoryPath :

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

Puede pegar esto como está en un shell * nix. En Windows, quite la ” \ ” y coloque todo en una sola línea.

Por cierto, puedes automatizarlo y hacerlo parte de tu construcción de maven. Lo siguiente instalará su jar en su repository local antes de la comstackción:

   org.apache.maven.plugins maven-install-plugin   hack-binary validate  ${basedir}/lib/your-lib.jar default your-group your-artifact 0.1 jar true   install-file     

Encuentro una solución fácil en caso de que cree el tarro

  org.apache.maven.plugins maven-war-plugin 2.1.1    dependencies/mydep WEB-INF/lib true  **/*.jar      

También puede manejar esto agregando un conjunto de dependencias suplementarias en sus conjuntos de dependencias.

  system  *:jar  lib  

Lo mejor sería usar un administrador de repository (como Nexus, Artifactory, Archiva) e instalar este tipo de dependencia en un repository particular. Después de eso puedes usar cosas como una dependencia simple. Esto simplificará tu vida.

Documentos: https://maven.apache.org/plugins/maven-assembly-plugin/assembly.html

Una solución simple para esto es agregarlo al repository maven local

Una forma de hacerlo es a través de mvn install commands como se sugiere en la publicación anterior.

Otra manera fácil es: 1) En su eclipse, haga clic con el botón derecho del mouse en la opción de proyecto seleccionar Maven. 2) Seleccione Instalar o desplegar un artefacto en una opción de repository maven y haga clic en siguiente. 3) Haga clic en Examinar al lado de la checkbox del archivo Artefacto y seleccione su archivo jar 4) Ingrese el Id. De grupo y ArtifactId y la versión asegúrese de que generar pom y crear sum de comprobación esté marcado y el empaque esté

Haga clic en finalizar, Wallah !!! su trabajo está hecho, el archivo jar se agrega en su repository local, que puede definir en el directorio setting.xml o m2

Ahora solo agregue la dependencia de maven simple según la versión GroupId, ArtifactId & jar que ha ingresado según la importación y que será empaquetado por maven.

Editado: Perdón por no haberme dado cuenta que ALX también mencionó la solución limpia del ciclo de vida.

  org.apache.maven.plugins maven-install-plugin   hack-binary clean  ${basedir}/lib/your-lib.jar default your-group your-artifact 0.1 jar true   install-file     

Con base en la solución provista por alx, puede ejecutar el paso del archivo de instalación en la fase limpia. pero dado que la fase de limpieza no está en el ciclo de vida predeterminado, debe ejecutar mvn clean la primera vez para asegurarse de que el jar esté listo en el repository local.

ex: mvn clean; paquete mvn

Ha funcionado de una manera más fácil en mi solución:

eliminar de su dependencia:

  tiago.medici eureka 0.0.1  

A continuación, agregue el maven-install-plugin en el pom.xml también.

  org.apache.maven.plugins maven-install-plugin   install-external clean  ${basedir}/external/tiago.medici-0.0.1.jar default tiago.medici eureka 0.0.1 jar true   install-file