Installa il jar locale con Maven

1. Il problema e le opzioni

Maven è uno strumento molto versatile e i suoi repository pubblici disponibili non sono secondi a nessuno. Tuttavia, ci sarà sempre un artefatto che non è ospitato da nessuna parte oppure è rischioso dipendere dal repository in cui è ospitato, poiché potrebbe non essere attivo quando ne hai bisogno.

Quando ciò accade, ci sono alcune scelte:

  • stringi i denti e installa una soluzione completa per la gestione dei repository come Nexus
  • prova a caricare il manufatto in uno dei repository pubblici più affidabili
  • installa il manufatto localmente usando un plugin Maven

Nexus è ovviamente la soluzione più matura, ma è anche la più complessa . Fornire un'istanza per eseguire Nexus, configurare Nexus stesso, configurarlo e mantenerlo potrebbe essere eccessivo per un problema così semplice come l'utilizzo di un singolo jar. Se questo scenario, ovvero l'hosting di artefatti personalizzati, è comune, un gestore di repository ha molto senso.

Anche il caricamento del manufatto in un repository pubblico o direttamente nella centrale di Maven è una buona soluzione, ma di solito lunga. Inoltre, la libreria potrebbe non essere affatto abilitata per Maven, il che rende il processo molto più difficile, quindi non è una soluzione realistica per poter utilizzare l'artefatto ORA.

Ciò lascia la terza opzione - aggiungere l'artefatto nel controllo del codice sorgente e utilizzare un plugin maven - in questo caso, il plugin maven-install per installarlo localmente prima che il processo di compilazione ne abbia bisogno . Questa è di gran lunga l'opzione più semplice e affidabile disponibile.

2. Installa il jar locale con m aven-install-plugin

Cominciamo con la configurazione completa necessaria per installare l'artefatto nel nostro repository locale:

 org.apache.maven.plugins maven-install-plugin 2.5.1  org.somegroup someartifact 1.0 jar ${basedir}/dependencies/someartifact-1.0.jar true    install-jar-lib  install-file  validate   

Ora, analizziamo e analizziamo i dettagli di questa configurazione.

2.1. Le informazioni sull'artefatto

Le informazioni sugli artefatti sono definite come parte di elemento. La sintassi effettiva è molto simile alla dichiarazione della dipendenza: un groupId , artifactId e gli elementi della versione .

La parte successiva della configurazione richiede la definizione del pacchetto del manufatto, specificato come jar .

Successivamente, dobbiamo fornire la posizione del file jar effettivo da installare: questo può essere un percorso di file assoluto o può essere relativo, utilizzando le proprietà disponibili in Maven . In questo caso, la proprietà $ {basedir} rappresenta la radice del progetto, ovvero la posizione in cui esiste il file pom.xml . Ciò significa che il file someartifact-1.0.jar deve essere posizionato in una directory / dependencies / sotto la radice.

Infine, ci sono molti altri dettagli opzionali che possono essere configurati.

2.2. L'esecuzione

L'esecuzione dell'obiettivo del file di installazione è vincolata alla fase di convalida dal ciclo di vita della build Maven standard. Pertanto, prima di tentare la compilazione, sarà necessario eseguire la fase di convalida in modo esplicito:

mvn validate

Dopo questo passaggio, la compilazione standard funzionerà:

mvn clean install

Una volta eseguita la fase di compilazione, il nostro someartifact-1.0.jar viene installato correttamente nel nostro repository locale, proprio come qualsiasi altro artefatto che potrebbe essere stato recuperato dalla stessa centrale di Maven.

2.3. Generare un POM vs Fornire il POM

La questione se sia necessario fornire un file pom.xml per l'artefatto o meno dipende principalmente dalle dipendenze di runtime dell'artefatto stesso. In poche parole, se l'artefatto ha dipendenze di runtime da altri jar, questi dovranno essere presenti anche sul classpath in fase di runtime. Con un semplice artefatto che non dovrebbe essere un problema, poiché probabilmente non avrà dipendenze in fase di esecuzione (una foglia nel grafico delle dipendenze).

L' opzione generatePom nell'obiettivo file di installazione dovrebbe essere sufficiente per questi tipi di artefatti:

true

Tuttavia, se l'artefatto è più complesso e ha dipendenze non banali , allora, se queste dipendenze non sono già nel classpath, devono essere aggiunte. Un modo per farlo è definire manualmente queste nuove dipendenze nel file pom del progetto. Una soluzione migliore è fornire un file pom.xml personalizzato insieme all'artefatto installato:

false ${basedir}/dependencies/someartifact-1.0.pom

Ciò consentirà a Maven di risolvere tutte le dipendenze del manufatto definito in questo pom.xml personalizzato , senza doverle definire manualmente nel file pom principale del progetto.

3. Conclusione

Questo articolo spiega come utilizzare un jar che non è ospitato da nessuna parte all'interno di un progetto Maven installandolo localmente con maven-install-plugin .