2008-09-16 12 views
44

Soy consciente de que puedo agregar repositorios maven para recuperar dependencias en ~/.m2/settings.xml. Pero, ¿es posible añadir un repositorio usando la línea de comandos, algo así como:¿Puedo agregar repositorios maven en la línea de comando?

mvn install -Dmaven.repository=http://example.com/maven2 

La razón por la que quiero hacer esto es porque estoy usando una herramienta de integración continua en la que tengo un control total sobre las opciones de línea de comandos que usa para llamar a maven, pero administrar el archivo settings.xml para el usuario que ejecuta la herramienta de integración es un poco molesto.

Respuesta

57

Puede hacer esto, pero probablemente sea mejor que lo haga en el POM como han dicho otros.

En la línea de comandos puede especificar una propiedad para el repositorio local y otro repositorio para los repositorios remotos. El repositorio remoto tendrá todas las configuraciones predeterminadas a través de

El ejemplo siguiente especifica dos repositorios remotos y un repositorio local personalizado.

mvn package -Dmaven.repo.remote=http://www.ibiblio.org/maven/,http://myrepo 
    -Dmaven.repo.local="c:\test\repo" 
+8

parece que esto no funciona para maven2, ¿o estoy equivocado? –

+0

Esto es útil para probar un repositorio de sonatype cerrado antes de la publicación. – schmmd

+2

¿Cómo especifico el nombre de usuario y la contraseña para el control remoto? –

3

No estoy seguro si puede hacerlo usando la línea de comando. Por otro lado, puede agregar repositorios en el pom.xml como en el siguiente ejemplo. Usando este enfoque no necesita cambiar el archivo ~/.m2/settings.xml.

<?xml version="1.0" encoding="UTF-8"?> 
    <project xmlns="http://maven.apache.org/POM/4.0.0" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    ... 
    <repositories> 
      <repository> 
       <id>MavenCentral</id> 
       <name>Maven repository</name> 
       <url>http://repo1.maven.org/maven2</url> 
       <releases> 
        <enabled>true</enabled> 
       </releases> 
       <snapshots> 
        <enabled>false</enabled> 
       </snapshots> 
      </repository> 
... 
      <repository> 
       <id>Codehaus Snapshots</id> 
       <url>http://snapshots.repository.codehaus.org/</url> 
       <snapshots> 
        <enabled>true</enabled> 
       </snapshots> 
       <releases> 
        <enabled>false</enabled> 
       </releases> 
      </repository> 
     </repositories> 

    ... 

     <pluginRepositories> 
      <pluginRepository> 
       <id>apache.snapshots</id> 
       <name>Apache Snapshot Repository</name> 
       <url> 
        http://people.apache.org/repo/m2-snapshot-repository 
       </url> 
       <releases> 
        <enabled>false</enabled> 
       </releases> 
      </pluginRepository> 
      <pluginRepository> 
       <id>Codehaus Snapshots</id> 
       <url>http://snapshots.repository.codehaus.org/</url> 
       <snapshots> 
        <enabled>true</enabled> 
       </snapshots> 
       <releases> 
        <enabled>false</enabled> 
       </releases> 
      </pluginRepository> 
     </pluginRepositories> 

    ... 

    </project> 
1

realmente no he utilizado Maven 2 antes, nuestro sistema todavía está trabajando en 1.x experto debido a algunos problemas con Maven 2.

Sin embargo, mirando a la documentación de Maven 2 parece que no hay propiedades específicas del sistema como esa. Sin embargo, podrías construir uno en tus poms/configuraciones usando las propiedades del sistema. Consulte Propiedades del sistema como parte de este http://maven.apache.org/settings.html

Por lo tanto, tendría $ {maven.repository} en el archivo de configuración y luego usaría el repositorio -D como lo hace anteriormente.

No estoy seguro si esto funcionaría, pero con algunos ajustes, estoy seguro de que se te ocurrirá algo.

3

Como @Jorge Ferreira ya dije que puso sus definiciones de repositorio en el pom.xml. Utilice profiles adittionally para seleccionar el repositorio de usar a través de línea de comandos:

mvn deploy -P MyRepo2 

mvn deploy -P MyRepo1 
1

Crear un POM que tiene la configuración del repositorio que desea y luego usar un elemento padre en sus POM proyecto para heredar los repositorios adicionales. El uso de un POM de "organización" tiene otros beneficios cuando un grupo de proyectos pertenece a un equipo.

5

Uno de los objetivos de Maven't Project Object Model (POM) es capturar toda la información necesaria para reproducir de forma fiable un artefacto, por lo que se desaconseja aprobar configuraciones que afecten a la creación de artefactos.

Para lograr su objetivo, puede registrar su archivo settings.xml de nivel de usuario con cada proyecto y usar la opción -s (o --settings) para pasarlo a la compilación.

2

Vamos a suponer aquí que usted está pidiendo esto porque de vez en cuando quiere añadir un nuevo repositorio tercera proveedores para tus construcciones. Puedo estar equivocado, por supuesto ...:)

Su mejor opción en este caso es usar un proxy administrado como artifactory o nexus. Luego haga un cambio por única vez en settings.xml para configurar esto como un espejo para el mundo.

Cualquier repositorio de terceros que necesite agregar a partir de ese momento se puede gestionar a través del proxy.

Cuestiones relacionadas