Domanda

Sto cercando di utilizzare un'estensione del vagone maven personalizzata per distribuire un vaso nel mio repository. Posso in qualche modo configurare in settings.xml che riconosce lo schema di url personalizzato da utilizzare con il carro specifico o devo sempre modificare i file pom per contenere l'estensione del carro?


Non è necessario disporre di un pom di base o di alcun pom disponibile quando si utilizza il file deploy. Settings.xml è l'unico posto che è garantito per essere lì, ma non riesco a capire come usarlo per definire le estensioni.

È stato utile?

Soluzione

OK, ok, una correzione: non è possibile definire l'elemento <build> all'interno di un <profile> definito in settings.xml. È possibile attivare il profilo in base-pom, ma definirlo in $M2_HOME/lib.

Mi dispiace, l'unico altro modo a cui potrei pensare (probabilmente cosa stai cercando) è copiare il vaso di estensione direttamente in $M2_HOME/lib/*.jar. Tutti <extension> vengono inseriti nel percorso di classe, quindi questo deve virtualmente avere lo stesso effetto di un <=>.

L'estensione è comunque migliore, perché puoi controllare più facilmente quale versione dell'estensione viene utilizzata (ad es. tramite la base-pom).

OK, prova a copiare l'estensione Jar sotto

    $M2_HOME/lib

Altri suggerimenti

Non so se il commento sopra di Brian Fox è ancora valido nel 2013. Ma alla fine ho dovuto creare un pom.xml minimo nella directory in cui ho provato a caricare l'artefatto per abilitare l'estensione di generazione del carro.

Ho dovuto aggiungere groupId, artefactId e version al pom.xml in modo che Maven non si lamentasse, anche se li ho forniti all'obiettivo deploy-file sulla riga di comando (immagino che deploy-file si preoccuperebbe solo dei parametri della riga di comando, sebbene ):

<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion>
<groupId>your-groupId</groupId>
<artifactId>your-artifactId</artifactId>
<version>your-version</version>
<build>
  <extensions>
    <extension>
      <groupId>org.apache.maven.wagon</groupId>
      <artifactId>wagon-ssh</artifactId>
      <version>2.4</version>
    </extension>
  </extensions>
</build>
</project>

Con questo semplice " pom.xml " sul posto ho potuto eseguire il file deploy finalmente usando scp come protocollo:

mvn deploy:deploy-file -Durl=scp://shell.sourceforge.net:/home/project-web/... -DrepositoryId=repoId -Dfile=my-file.jar -DgroupId=your-groupId -DartifactId=your-artifactId -Dversion=your-version -Dpackaging=jar

Devi aggiungere l'estensione del carro al tuo livello superiore pom.xml . La maggior parte degli ambienti ha uno aziendale in cima a tutti i loro progetti (best practice), quindi in genere questo non è troppo doloroso per i singoli sviluppatori - ereditano semplicemente dal pom aziendale.

<build>
  <extensions>
    <extension>
      <groupId>org.apache.maven.wagon</groupId>
      <artifactId>wagon-scm</artifactId>
      <version>1.0-alpha-7-SNAPSHOT</version>
    </extension>
    <extension>
      <groupId>org.apache.maven.scm</groupId>
      <artifactId>maven-scm-manager-plexus</artifactId>
      <version>1.0-beta-3-SNAPSHOT</version>
    </extension>
    <extension>
      <groupId>org.apache.maven.scm</groupId>
      <artifactId>maven-scm-provider-svnexe</artifactId>
      <version>1.0-beta-3-SNAPSHOT</version>
    </extension>
  </extensions>
</build>
<distributionManagement>
  <site>
    <id>my.svn.server</id>
    <url>scm:svn:https://username@svn.apache.org/svn/root/module</url>
  </site>
</distributionManagement>

Quando registri il tuo provider, registra anche il modello di protocollo e credo. Puoi visualizzare un elenco completo dei provider esistenti qui .

Credo che sia il metodo getScmType () a registrare l'estensione, ma non ne sono sicuro al 100%.

/** {@inheritDoc} */
public String getScmType()
{
    return "git";
}

Il link alla fonte del provider Git può essere trovato qui.

siddhadev ha ragione, ma ci sono alcune cose aggiuntive ... (Lo metterei in un commento ma non ho abbastanza reputazione)

Puoi tenere separati i tuoi JAR mettendoli sotto:   $ M2_HOME / lib / ext

Hai bisogno di tutte le dipendenze, quindi fai qualcosa del tipo:

  1. cd ~ / .m2 / repository / org / apache / maven / wagon / wagon-ssh-external / 2.2
  2. cp wagon-ssh-external-2.2.jar $ M2_HOME / lib / ext
  3. cp wagon-ssh-external-2.2.pom pom.xml
  4. dipendenza mvn: copia-dipendenze -DoutputDirectory = $ M2_HOME / lib / ext
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top