2009-08-31 16 views
57

Si tuviera que utilizar una biblioteca de terceros que no estaba en el repositorio público de maven, ¿cuál es la mejor manera de incluirlo como dependencia de mi proyecto para que otra persona mi código todavía será capaz de construir?Maven: incluido el archivo jar que no se encuentra en el repositorio público

decir

mi solicitud "A" depende de frasco "B", que no existe en el repositorio público. Yo, sin embargo, deseo agregar "B" como una dependencia a "A" de modo que cuando una persona en el otro lado del mundo pueda verificar el código y todavía pueda construir "A"

+0

posible duplicado de [¿Puedo agregar archivos jar a maven 2 classpath de compilación sin instalarlos?] (Http://stackoverflow.com/questions/364114/can-i-add-jars-to-maven-2-build- classpath-without-installed-them) –

Respuesta

55

Puede instalar el proyecto tú mismo.

o puede utilizar el alcance system como la 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.

+0

Esto funciona bien para probar el uso de un jar si no está disponible en un administrador de repositorios. – ekillaby

+1

¿Por qué utilizo este trabajo en mi proyecto web maven? El proyecto no puede implementarse en tomcat, pero compila bien. ¿Algún consejo? (No me digas que lo instale en el repositorio maven local), gracias – janwen

+0

Me salvaste el día, gracias, notnoop. Agregar jar externo por propiedades de proyecto simplemente no funciona. – oohtj

14

El uso del alcance del sistema puede funcionar, pero no se recomienda incluso en la especificación Maven. no es portátil.

del libro Maven:

sistema- El alcance del sistema es similar a la de siempre, excepto que tiene que proporcionar una ruta explícita a la jarra 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. El artefacto se supone para estar siempre disponible y no se busca en un repositorio. Si declara que el alcance es sea sistema, también debe proporcionar el elemento systemPath. Tenga en cuenta que este alcance no es recomendado (siempre debe tratar de hacer referencia a las dependencias en un repositorio público o personalizado de Maven ).

El mejor enfoque es instalarlo en su repositorio local o en su repositorio de la empresa para que sea accesible para todos sus colegas.

esto es muy fácil si está utilizando un administrador de repositorio como Nexus.

+0

Si tuviera que instalarlo en mi repositorio local, ¿cómo podrían los demás construir el proyecto si no tuvieran acceso a mi repositorio local?por ejemplo, si tuviera una aplicación que puse a disposición del público en línea y luego (rperez) quería descargar ese proyecto y compilarlo, ¿cómo accedería a mi repositorio local para construirlo? – digiarnie

+4

es por eso que sugerí usar un repositorio empresarial. cuando tienes un ent. repositorio como el Nexus que estamos usando, funciona de dos maneras: 1) proxy para los repositorios públicos: descargue todas las bibliotecas 3'rd party necesarias y guárdelas para un uso real 2) almacene todos los artefactos de su organización además también puede almacenar bibliotecas que no están en el dominio público. este repositorio es accesible para quien quieras. puede ponerlo en la intranet de la compañía o darle una URL pública, a su elección. – rperez

16

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.

POM Padres:

<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 de la jarra 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 haz referencia a la forma en que configuras groupid, artifact, etc en el pom padre.Por ejemplo:

<dependency> 
    <groupId>net.authorize</groupId> 
    <artifactId>anet-java-sdk</artifactId> 
    <version>1.4.6</version> 
</dependency> 
+0

Esta parece ser la respuesta correcta. ¿Hay alguna forma de instalar múltiples dependencias en el ejemplo anterior? – javydreamercsw

+0

Debería poder tener varios elementos de en el complemento. –

+1

Pude averiguarlo. Moví la configuración dentro de la parte de ejecución y luego tuve múltiples ejecuciones, una para cada dependencia. ¡Gracias! – javydreamercsw

0

Si está utilizando maravilloso/suite de herramientas Grial (GGTS), entonces usted directamente puede importar que la dependencia de terceros (pero asegúrese de tener esa tercera dependencia de fiesta en su repositorio local) mediante el siguiente pasos:

  1. Vaya al Explorador de proyectos y haga clic derecho en el proyecto.
  2. Haga clic en importar opción.
  3. gastar la opción experto y seleccione instalar o desplegar un artefacto a un repositorio Maven y haga clic en Siguiente.
  4. cejas y seleccionar esa dependencia de terceros usando Artefacto archivo opción y entrar en el detalle de ID de grupo, Artefacto Id y versión usando pom.xml archivo y haga clic en terminar

Espere un momento y posiblemente se haya producido un error para ese problema.

1

En general, primero debe colocar el jar de terceros en su repositorio local. Después de eso, puede usarlo agregando la dependencia en pom.xml.

Por ejemplo.

1.put el frasco en su repositorio local en primer lugar:

mvn install:install-file -Dfile=<path-to-file> 

Nota: este comando requiere experto a instalar plug-in-versión 2.5 o posterior. Si no, puede consultar Here

2.utilice el jar agregando la dependencia al pom.xml de su proyecto.
sólo tiene que añadir 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.you puede entonces empaquetar o implementar su proyecto mediante la ejecución de mvn package o mvn deploy

La tercera jarra de fiesta también se incluirá en el paquete.

+0

¿Cómo funciona la instalación de 'mvn' en la versión correcta/nombres de paquete aquí? – monojohnny

+0

maven encontrará los nombres de versión/paquete en pom.xml del jar que se va a instalar. @monojohnny –

+0

ah ok - entonces asume que el JAR agregado también fue generado por Maven (y también incluye el 'pom.xml') - ¿Creo? – monojohnny

Cuestiones relacionadas