2016-02-02 12 views
7

Ho bisogno di distribuire un jar personalizzato su Artifactory insieme al jar generato dal mio progetto Java. Attualmente l'unico metodo che posso trovare è attraverso la linea di porta di comando utilizzando:Posso includere la distribuzione mvn: deploy-file nel pom o settings.xml invece di cli goal

mvn deploy:deploy-file -DgroupId=<group-id> \ 
    -DartifactId=<artifact-id> \ 
    -Dversion=<version> \ 
    -Dpackaging=<type-of-packaging> \ 
    -Dfile=<path-to-file> \ 
    -Durl=<url-of-the-repository-to-deploy> 

Esiste un modo di includere questo nel file POM? Come plugin o qualcosa del genere?

+0

Cos'è questo JAR? È generato dalla build di Maven? Come? Ad esempio, dal 'maven-assembly-plugin'? – Tunaki

+0

No, il jar è stato compilato usando solo la normale compilation java. Non è un progetto maven. – user171943

risposta

8

Sicuro. È sufficiente definire un'esecuzione dell'obiettivo maven-deploy-plugin:deploy-file associato alla fase deploy, configurata con i valori. Quando si distribuisce il progetto, questa esecuzione verrà richiamata e il JAR verrà distribuito.

<plugin> 
    <artifactId>maven-deploy-plugin</artifactId> 
    <version>2.8.2</version> 
    <executions> 
     <execution> 
      <id>deploy-file</id> 
      <phase>deploy</phase> 
      <goals> 
       <goal>deploy-file</goal> 
      </goals> 
      <configuration> 
       <file><!-- path-to-file --></file> 
       <url><!-- url-of-the-repository-to-deploy --></url> 
       <groupId><!-- group-id --></groupId> 
       <artifactId><!-- artifact-id --></artifactId> 
       <version><!-- version --></version> 
       <packaging><!-- type-of-packaging --></packaging> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

Nota che probabilmente sarà necessario aggiungere un repositoryId anche. Questo è l'id del server per eseguire il mapping su <id> nella sezione <server> dello settings.xml.

+0

Ma perché non funziona se "" deploy viene rimosso? –

+0

@ Jean-LouisJouannic Poiché l'esecuzione non sarà associata a una fase, pertanto non verrà eseguita per impostazione predefinita.La specifica di ' deploy' consente di eseguire questa esecuzione quando viene eseguito 'mvn deploy'. – Tunaki

+0

Sono d'accordo, ma rimuovere ' deploy' e chiamare 'mvn deploy: deploy-file' dovrebbe funzionare, non dovrebbe? Ma non lo è e non capisco perché. –

0

È possibile caricare custom maven settings.xml in TeamCity, dove è necessario specificare distributionManagement e server come indicato on this documentation page. Dopodiché, se modifichi il passaggio del tuo maven build per utilizzare le impostazioni caricate, la distribuzione verrà eseguita aggiungendo semplicemente deploy giallo a un set di obiettivi eseguiti in questo passaggio.

+0

Ho già un personalizzato maven settings.xml dove specificherò le impostazioni del server e del proxy ecc., Ma come faccio a includere deploy: deploy-file mojo come step? – user171943

+0

Se si include il tag distributionManagement in settings.xml o pom.xml, non è necessario eseguire deploy: obiettivo del file di distribuzione. Crea un passaggio generico, usa le tue impostazioni.xml e aggiungi 'deploy' agli obiettivi. –

0

La sezione Working with Maven nel manuale Artifactory tratta questo argomento in dettaglio, in particolare la parte su deploying artifacts.
Inoltre è possibile guardare lo screencast su setting Artifactory as a Maven repository.

Per distribuire artefatti di build tramite Artifactory è necessario aggiungere un elemento distributionManagement al file pom del progetto con l'URL di un repository locale di destinazione a cui si desidera distribuire le risorse utente. Inoltre, è necessario il configure credenziali del server Artifactory nel proprio file settings.xml.
L'artefatto può aiutare a generare sia lo snippet distributionManagement che le impostazioni.xml (vedere più informazioni nei collegamenti che ho fornito sopra).

0

Personalmente non penso che dichiararlo in POM sia un buon approccio. Ad esempio, se si dispone di un progetto Maven multi-modulo composto da POM figli che ereditano dal padre POM/super POM e il jar personalizzato da caricare è contenuto solo in 1 modulo figlio, sarà necessario dichiarare esplicitamente la configurazione in genitore POM (dal mvn deploy è normalmente utilizzato per eseguire il superpom) e dichiarare ogni altro POM figlio per saltare l'esecuzione della configurazione, che ingombra la struttura POM.

Un approccio migliore sarebbe scrivere uno script e collegarlo alle configurazioni di esecuzione dell'obiettivo deploy poiché l'obiettivo deploy:deploy-file si trova alla fine del ciclo di vita della build.

Problemi correlati