2012-07-10 17 views
5

Por lo que yo puedo decir, el despliegue de un artefacto binario de terceros mediante experto se hace de esta manera:Maven 3: implementación de un artefacto utilizando SCP

mvn deploy:deploy-file -DgroupId=<group-id> \ 
    -DartifactId=<artifact-id> \ 
    -Dversion=<version> \ 
    -Dpackaging=<type-of-packaging> \ 
    -Dfile=<path-to-file> \ 
    -DrepositoryId=<id-to-map-on-server-section-of-settings.xml> \ 
    -Durl=<url-of-the-repository-to-deploy> 

Supongamos que mi repositorio es accesible a través de SCP, por lo que para instancia en el comando anterior

-Durl=scpexe://example.org//users/mvnrepo/maven 

Al usar maven 3, este comando de implementación falla con un mensaje de error.

La solución alternativa que utilicé fue copiar dos jarrones: wagon-ssh-common-2.2.jar y wagon-ssh-external1.0.jar en mi directorio $M2_HOME/lib.

De ahí mi pregunta: ¿Por qué Maven no puede recuperar los vagones apropiados por sí mismo?

(y, cómo tiene que hacer eso si es posible?)

Respuesta

4

Como respuesta directa y corta: la adición de una tercera parte, es necesario tener:

  • ya sea un repositorio Maven (aplicación como nexo o Artifactory con interfaz gráfica de usuario)
  • o un pom. xml (en la línea de comandos)

Otras consideraciones

Supongo que desea utilizar una biblioteca de terceros, no solo publicar su propio archivo.

  1. Si desea utilizar una biblioteca de terceros, realmente debe buscar un repositorio existente que la aloje. Estoy bastante seguro de que ya has buscado, pero es la mejor manera de hacerlo. Si encuentras uno, simplemente agrégalo a tu maven repo cache.

  2. A continuación, si no encuentra una, puede agregarla a su repositorio, asumiendo que TIENE. Realmente no sé si estás familiarizado con esto, y puede sonar obvio, así que por favor, perdóname. pero un repositorio no es solo un servidor de archivos. Carlspring Kinney habló sobre Nexus para dar un ejemplo. También hay Artifactory, y muchos otros. Son verdaderos servidores de aplicaciones. Entonces, debes tener tu propio. Tienen interfaces que le permiten agregar artefactos, proporcionando cierta información al respecto (al menos grupo, id, versión).

  3. Finalmente, Maven se ocupa del paradigma de la dependencia. Esto no es formal, sino solo partes de consideración:

    • ¿Quién la desarrolló?
    • ¿De qué depende (otras librerías)?
    • ¿Quién lo brinda?
    • ¿es confiable?
    • ...

Todas esas informaciones deben ser colocados en pom.xml, y que en realidad serían colocados por el autor (véase 1), o al menos se proporciona cuando se utiliza en Maven (ver 2). En todos los casos, provienen de pom.xml ... autogenerados o no ... por lo que necesitarás un pom.xml :).


De hecho, la edición o el uso de bibliotecas conduce a los mismos problemas: debe proporcionar información acerca de lo que el dev con el fin de utilizar de la manera más automatted y confiable. A veces es bastante feo, pero esta es la mejor manera de hacerlo.

Una vez más, por favor, perdóneme si eso suena obvio. Pero por experiencia, cuando no logras hacer algo con Maven, con frecuencia es porque no es la mejor forma de hacerlo, incluso tu proceso es muy más pequeño que "El mayor proceso de desarrollo" que debería impulsar a todos :)

+0

Estoy de acuerdo con Jean-Rémy, hay otros repositorios de Maven como Archiva y Artifactory. Solo estaba dando un ejemplo de uno de esos: Nexus. – carlspring

+1

Reformuqué lo que escribí carlspring. Mi intención no era reducir lo que dijiste. :) Entendí lo que quieres decir :) –

7

vagones son extensiones de Maven. Se pueden añadir los siguientes:

<project> 
    <build> 
     <extensions> 
      <extension> 
       <groupId>org.apache.maven.wagon</groupId> 
       <artifactId>wagon-ssh</artifactId> 
       <version>1.0</version> 
      </extension> 
     </extensions> 
    </build> 
</project> 

Para más detalles se puede consultar la página Maven Wagon.

+1

Bien, pero para una implementación binaria rápida de terceros, desearía no tener que crear un archivo POM. ¿Podría ser agregado a un archivo de configuración global o similar? – Rom1

+1

Si está utilizando Nexus, puede cargar los archivos a través de la aplicación web. – carlspring

Cuestiones relacionadas