maven-2 - repositorios - pom xml que es
Maven: incluyendo jar no encontrado en el repositorio público (5)
Si utilizara una biblioteca de terceros que no estaba en el repositorio público de Maven, ¿cuál es la mejor manera de incluirla como dependencia para mi proyecto, de modo que cuando alguien más revise mi código todavía pueda construirlo?
es decir
Mi aplicación "A" depende del jar "B" que no existe en el repositorio público. Sin embargo, deseo agregar "B" como una dependencia a "A" de tal manera que cuando una persona en el otro lado del mundo pueda verificar el código y aún así poder construir "A"
El uso del alcance del sistema puede funcionar pero no se recomienda incluso en la especificación de Maven. no es portatil
del libro de Maven:
sistema: el alcance del sistema es similar al proporcionado, excepto que debe proporcionar una ruta explícita al JAR en el sistema de archivos local. Esto tiene la intención de permitir la compilación contra objetos nativos que pueden ser parte de las bibliotecas del sistema. Se supone que el artefacto siempre está disponible y no se busca en un repositorio. Si declara que el alcance es sistema, también debe proporcionar el elemento systemPath. Tenga en cuenta que no se recomienda este ámbito (siempre debe intentar hacer referencia a dependencias en un repositorio Maven público o personalizado).
El mejor enfoque es instalarlo en su repositorio local o en su repositorio empresarial para que todos sus compañeros puedan acceder a él.
esto es muy fácil si está utilizando un administrador de repositorio como Nexus.
En términos generales, primero debe colocar el contenedor de terceros en su repositorio local. Después de eso, puede usarlo agregando la dependencia a pom.xml.
Por ejemplo.
1. Ponga el tarro en su repositorio local primero:
mvn install:install-file -Dfile=<path-to-file>
Nota: este comando requiere maven-install-plugin versión 2.5 o posterior. Si no, puedes consultar Here
2.Utilice el tarro agregando la dependencia en el pom.xml de su proyecto.
simplemente agregue esto en el pom.xml de su proyecto:
<dependency>
<groupId>${the groupId in the jar''s pom.xml}</groupId>
<artifactId>${the artifactId in the jar''s pom.xml}</artifactId>
<version>${the version in the jar''s pom.xml}</version>
</dependency>
3. Puede empaquetar o implementar su proyecto ejecutando mvn package
o mvn deploy
El tarro de terceros también se incluirá en el paquete.
Puede instalar el proyecto usted mismo.
O puede usar el alcance del system
como el siguiente:
<dependency>
<groupId>org.group.project</groupId>
<artifactId>Project</artifactId>
<version>1.0.0</version>
<scope>system</scope>
<systemPath>${basedir}/lib/project-1.0.0.jar</systemPath>
</dependency>
systemPath
requiere la ruta absoluta del proyecto. Para hacerlo más fácil, si el archivo jar está dentro del repositorio / proyecto, puede usar la propiedad ${basedir}
, que está vinculada a la raíz del proyecto.
Si está usando el conjunto de herramientas groovy / grail ( GGTS ), puede importar directamente la dependencia de terceros (pero asegúrese de tener esa dependencia de terceros en su repositorio local) siguiendo los pasos a continuación:
- Vaya al Explorador de proyectos y haga clic derecho en el proyecto.
- Haga clic en la opción de importación .
- Pase la opción maven y seleccione Instalar o implementar un artefacto en un repositorio maven y haga clic en siguiente.
- Busque y seleccione la dependencia de terceros utilizando la opción Archivo de artefactos e ingrese los detalles de Id. De grupo, Id. De artefacto y Versión utilizando el archivo POM.xml y haga clic en Finalizar
Espera un momento y posiblemente el error hubiera ido por ese problema.
Si tiene un proyecto principal con un módulo que se encuentra en esta situación (requiere una dependencia que no está en un repositorio), puede configurar su proyecto principal para usar el complemento exec-maven-plugin para instalar automáticamente su archivo dependiente. Por ejemplo, tuve que hacer esto con el archivo jar authorize.net ya que no está disponible públicamente.
Padre POM:
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
<inherited>false</inherited>
<executions>
<execution>
<id>install-anet</id>
<phase>validate</phase>
<goals>
<goal>exec</goal>
</goals>
</execution>
</executions>
<configuration>
<executable>mvn</executable>
<arguments>
<argument>install:install-file</argument>
<argument>-Dfile=service/lib/anet-java-sdk-1.4.6.jar</argument>
<argument>-DgroupId=net.authorize</argument>
<argument>-DartifactId=anet-java-sdk</argument>
<argument>-Dversion=1.4.6</argument>
<argument>-Dpackaging=jar</argument>
</arguments>
</configuration>
</plugin>
</plugins>
</build>
En el ejemplo anterior, la ubicación del contenedor está en la carpeta lib del módulo "servicio".
Para cuando el módulo de servicio entre en la fase de validación, el contenedor estará disponible en el repositorio local. Simplemente haga referencia en la forma en que configura el groupid, el artefacto, etc. en el pom principal. Por ejemplo:
<dependency>
<groupId>net.authorize</groupId>
<artifactId>anet-java-sdk</artifactId>
<version>1.4.6</version>
</dependency>