it-swarm-es.tech

¿Puedo agregar repositorios de maven en la línea de comando?

Soy consciente de que puedo agregar repositorios de Maven para obtener dependencias en ~/.m2/settings.xml. Pero, ¿es posible agregar un repositorio usando la línea de comandos, algo como:

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 donde tengo control total sobre las opciones de la línea de comandos que usa para llamar a Maven, pero administrar un poco la configuración.xml para el usuario que ejecuta la herramienta de integración de una molestia.

61
Sindri Traustason

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 aunque

El siguiente ejemplo 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"
68
Rich Seller

Uno de los objetivos de Maven't Project Object Model (POM) es capturar toda la información necesaria para reproducir de manera confiable un artefacto, por lo que se desaconseja enfáticamente el paso de configuraciones que impactan 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.

6
ddimitrov

No estoy seguro de poder hacerlo usando la línea de comandos. Por otro lado, puede agregar repositorios en 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>
5
Jorge Ferreira

Asumiré aquí que estás preguntando esto porque ocasionalmente deseas agregar un nuevo repositorio de terceros a tus compilaciones. Puede que me equivoque, por supuesto ... :)

En este caso, lo mejor que puede hacer es usar un proxy administrado como artifactory o nexus. Luego realice un cambio único en settings.xml para configurarlo como un espejo para el mundo.

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

3
Kevin Wright

Como ya dijo @Jorge Ferreira, ponga sus definiciones de repositorio en el pom.xml. Use profiles adittionally para seleccionar el repositorio a usar a través de la línea de comando:

mvn deploy -P MyRepo2

mvn deploy -P MyRepo1
3
Eduard Wirch

Realmente no he usado maven 2 antes, nuestro sistema todavía está funcionando en maven 1.x debido a algunos problemas con maven 2.

Sin embargo, mirando la documentación de maven 2, parece que no hay propiedades específicas del sistema como esa. Sin embargo, probablemente podría crear uno en su poms/configuración utilizando las propiedades del sistema. Vea la parte de propiedades del sistema de este http://maven.Apache.org/settings.html

Así que tendría $ {maven.repository} en su archivo de configuración y luego usaría el -Dmaven.repository como lo hace anteriormente.

No estoy seguro de si esto funcionaría, pero con algunos ajustes estoy seguro de que se puede llegar a algo.

2
Henry B

Cree un POM que tenga la configuración de repositorio que desea y luego use un elemento principal en los POM de su proyecto para heredar los repositorios adicionales. El uso de una "organización" POM tiene otros beneficios cuando un grupo de proyectos pertenece a un equipo.

1
Steve Moyer