Problemi di approcci popolari
La maggior parte delle risposte che troverai su Internet ti suggerirà di installare la dipendenza nel tuo repository locale o di specificare un ambito di "sistema" nel pom
e distribuire la dipendenza con l'origine del tuo progetto. Ma entrambe queste soluzioni sono in realtà imperfette.
Perché non dovresti applicare l'approccio "Installa in Repo locale"
Quando si installa una dipendenza nel proprio repository locale, rimane lì. Il tuo artefatto di distribuzione andrà bene fintanto che avrà accesso a questo repository. Il problema è nella maggior parte dei casi che questo repository risiederà sul tuo computer locale, quindi non ci sarà modo di risolvere questa dipendenza su nessun altro computer. Chiaramente far dipendere il tuo artefatto da una macchina specifica non è un modo per gestire le cose. Altrimenti questa dipendenza dovrà essere installata localmente su ogni macchina che lavora con quel progetto che non è migliore.
Perché non dovresti applicare l'approccio "Ambito del sistema"
I vasi su cui si basa l'approccio "Ambito di sistema" non vengono né installati in alcun repository né collegati ai pacchetti di destinazione. Ecco perché il tuo pacchetto di distribuzione non avrà modo di risolvere tale dipendenza quando utilizzato. Ciò che ritengo fosse il motivo per cui l'uso dell'ambito del sistema è persino diventato obsoleto. Ad ogni modo non vuoi fare affidamento su una funzione obsoleta.
La soluzione di repository statico nel progetto
Dopo aver inserito questo nel tuo pom
:
<repository>
<id>repo</id>
<releases>
<enabled>true</enabled>
<checksumPolicy>ignore</checksumPolicy>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
<url>file://${project.basedir}/repo</url>
</repository>
per ogni artefatto con un ID di gruppo in forma x.y.z
Maven includerà la seguente posizione all'interno della dir del progetto nella sua ricerca di artefatti:
repo/
| - x/
| | - y/
| | | - z/
| | | | - ${artifactId}/
| | | | | - ${version}/
| | | | | | - ${artifactId}-${version}.jar
Per approfondire questo, puoi leggere questo post sul blog .
Utilizzare Maven per l'installazione nel project repo
Invece di creare questa struttura a mano, ti consiglio di usare un plugin Maven per installare i tuoi vasetti come artefatti. Quindi, per installare un artefatto in un repository in-project nella repo
cartella eseguire:
mvn install:install-file -DlocalRepositoryPath=repo -DcreateChecksum=true -Dpackaging=jar -Dfile=[your-jar] -DgroupId=[...] -DartifactId=[...] -Dversion=[...]
Se sceglierai questo approccio, sarai in grado di semplificare la dichiarazione del repository in pom
:
<repository>
<id>repo</id>
<url>file://${project.basedir}/repo</url>
</repository>
Una sceneggiatura di aiuto
Poiché l'esecuzione del comando di installazione per ogni libreria è un po 'noiosa e sicuramente soggetta a errori, ho creato uno script di utilità che installa automaticamente tutti i barattoli da una lib
cartella a un repository di progetto, risolvendo automaticamente tutti i metadati (groupId, artefactId e ecc.) Da nomi dei file. Lo script stampa anche le dipendenze xml che puoi copiare e incollare nel tuo pom
.
Includi le dipendenze nel pacchetto di destinazione
Quando avrai creato il tuo repository in-project avrai risolto un problema di distribuzione delle dipendenze del progetto con la sua fonte, ma da allora l'artefatto di destinazione del tuo progetto dipenderà da vasetti non pubblicati, quindi quando installerai in un repository avrà dipendenze irrisolvibili.
Per ovviare a questo problema, suggerisco di includere queste dipendenze nel pacchetto di destinazione. Questo è possibile farlo con il plug-in di assemblaggio o meglio con il plug-in OneJar . Il documentaion ufficiale su OneJar è facile da comprendere.