Domanda

Sono consapevole di poter aggiungere repository Maven per recuperare le dipendenze in ~/.m2/settings.xml.Ma è possibile aggiungere un repository utilizzando la riga di comando, qualcosa del tipo:

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

Il motivo per cui voglio farlo è perché sto utilizzando uno strumento di integrazione continua in cui ho il pieno controllo sulle opzioni della riga di comando che utilizza per chiamare maven, ma gestire settings.xml per l'utente che esegue lo strumento di integrazione è un po' complicato di una seccatura.

È stato utile?

Soluzione

Puoi farlo ma probabilmente è meglio farlo nel POM come altri hanno già detto.

Sulla riga di comando è possibile specificare una proprietà per il repository locale e un altro repository per i repository remoti.Il repository remoto avrà comunque tutte le impostazioni predefinite

L'esempio seguente specifica due repository remoti e un repository locale personalizzato.

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

Altri suggerimenti

Uno degli obiettivi di Maven't Project Object Model (POM) è acquisire tutte le informazioni necessarie per riprodurre in modo affidabile un artefatto, pertanto è fortemente sconsigliato trasferire impostazioni che incidono sulla creazione dell'artefatto.

Per raggiungere il tuo obiettivo, puoi archiviare il file settings.xml a livello utente con ciascun progetto e utilizzare l'opzione -s (o --settings) per passarlo alla build.

Non sono sicuro che sia possibile farlo utilizzando la riga di comando.Puoi d'altra parte aggiungere repository nel file pom.xml come nell'esempio seguente.Utilizzando questo approccio non è necessario modificare il file ~/.m2/settings.xml file.

    <?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>

Come ha già detto @jorge Ferreira, metti le definizioni del tuo repository in pom.xml.Utilizzo profili inoltre per selezionare il repository da utilizzare tramite riga di comando:

mvn deploy -P MyRepo2

mvn deploy -P MyRepo1

Presumo che tu lo stia chiedendo perché occasionalmente desideri aggiungere un nuovo repository di terze parti alle tue build.potrei sbagliarmi ovviamente...:)

La soluzione migliore in questo caso è utilizzare un proxy gestito come artifactory o nexus.Quindi apporta una modifica una tantum a settings.xml per configurarlo come uno specchio per il mondo.

Qualsiasi repository di terze parti che dovrai aggiungere da quel momento in poi può essere gestito tramite proxy.

Non ho mai usato Maven 2 prima, il nostro sistema funziona ancora su Maven 1.x a causa di alcuni problemi con Maven 2.

Tuttavia, guardando la documentazione di Maven 2 sembra che non ci siano proprietà di sistema specifiche del genere.Tuttavia, potresti probabilmente crearne uno nei tuoi poms/impostazioni usando le proprietà di sistema.Vedi la parte relativa alle proprietà del sistema http://maven.apache.org/settings.html

Quindi avresti ${maven.repository} nel file delle impostazioni e quindi utilizzeresti -Dmaven.repository come hai fatto sopra.

Non sono sicuro che funzionerebbe, ma con qualche modifica sono sicuro che potresti inventare qualcosa.

Crea un POM con le impostazioni del repository che desideri e quindi utilizza un elemento principale nei POM del tuo progetto per ereditare i repository aggiuntivi.L'uso di un POM "organizzativo" presenta molti altri vantaggi quando un gruppo di progetti appartiene a un team.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top