Abbiamo un numero di dipendenze di terze parti che non sono ospitate da nessuna parte. Per ognuno di questi abbiamo un file jar che vorremmo poter installare e/o implementare nel nostro repository. Alcuni dei file jar hanno le loro dipendenze e dobbiamo anche dichiararli.maven installa e distribuisci dipendenze di terze parti con una semplice riga di comando
Abbiamo fatto file pom.xml per ogni file jar che dichiarano i GroupID, artifactId, dipendenze, ecc Questi file pom.xml hanno tutti una pom genitore comune che dichiara alcune delle informazioni comuni (ad esempio <repositories>
e <distributionManagement>
).
Mi piacerebbe essere in grado di installare o implementare queste dipendenze con qualcosa di semplice come mvn install
e mvn deploy
(o forse mvn install:install-file
e mvn deploy:deploy-file
) e hanno tutte le proprietà necessarie per questi comandi (artifactId
, repositoryId
, ecc) essere leggi dai file pom.xml.
Per ottenere questo lavoro, almeno per la distribuzione, ho provato a mettere il seguente nel mio pom genitore:
<build>
<plugins>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.4</version>
<configuration>
<file>${jarfile}</file>
<pomFile>pom.xml</pomFile>
<repositoryId>our-id</repositoryId>
<url>our-url</url>
</configuration>
</plugin>
</plugins>
</build>
e poi avere ciascuno dei pon bambino definire la proprietà jarfile
. Ciò mi consente di eseguire mvn deploy:deploy-file
per distribuire tutti gli artefatti del figlio secondario. Presumibilmente, potrei fare qualcosa di simile per far funzionare mvn install:install-file
.
Ma con questo approccio, io sono in grado di rilasciare il pom genitore (che devo fare dal momento che i poms bambino dipendono da esso), e se provo a mvn release:perform
sul POM genitore, ricevo errori come:
Cannot override read-only parameter: pomFile
Mi sento come se probabilmente stessi andando su questo nel modo sbagliato. Tutto quello che veramente voglio fare è:
- mettere il codice comune a tutte le terze barattoli parti in uno condiviso POM genitore
- Scrivi un pom minimo aggiuntivo per ogni barattolo di terze parti
- in grado di eseguire qualcosa come
mvn install
omvn deploy
senza dover specificare tutte quelle complicate le proprietà della riga di comando
Come posso meglio realizzare questo?
Edit: Ha reso più chiaro sopra che Idealmente mi piacerebbe essere in grado di eseguire qualcosa di semplice come mvn install
o mvn deploy
e non è necessario specificare le proprietà nella riga di comando.
Mi spiace, cos'è un GAV? E non penso che la linea di comando che Maven fornisce come un errore risolverà il mio problema qui - come può Maven sapere quali dipendenze quel file jar ha senza di me scrivere anche un pom per esso? – Steve
È un'abbreviazione per "Gruppo, Artefatto, Versione". Quando si definisce il GAV per una dipendenza che non è già in un repository remoto (centrale o definito in un '', genera tale riga di comando come parte del rapporto errori. Provalo! –
Sì, vedo che genera una riga di comando come 'mvn deploy: deploy-file -DgroupId = ... -DartifactId = ... -Dversion = ... -Dpackaging = jar -Dfile =/percorso/to/file -Durl = [url] -DrepositoryId = [id] '. Ma non sa quali dipendenze ha questo jar e dato che l'url e repositoryId sono comuni per tutte le dipendenze di terze parti che ho, voglio solo dichiararle una volta in un genitore e non doverli ricordare ogni volta – Steve