Come configurare un sottoprogetto di dipendenza Maven senza distribuzione di vasi?
-
24-09-2019 - |
Domanda
Ho cercato su google questo e sembra che nessuno ha una risposta, ma sembra che questo elementare cosa che dovrebbe essere possibile.
Ho la seguente struttura di progetto:
parent
---sub-project1
---sub-project2
sub-progetto2 necessità di avere sub-progetto1 come una dipendenza.
Così ho questo sub-progetto2 del pom:
<dependencies>
<dependency>
<artifactId>sub-project1</artifactId>
<groupId>mygroup</groupId>
<version>1.0-SNAPSHOT</version>
</dependency>
....
Quando faccio questo, Maven prova a scaricare l'sub-project1.jar file, che non esiste perché non è pronto per la repo di sicurezza.
Ho provato a mettere un <scope>import</scope>
nella dipendenza, ma che non ha funzionato neanche -- stesso risultato.
Quindi cosa devo fare per ottenere Maven per guardare sub-progetto1 quando la creazione di sub-progetto2?
MODIFICA Qui ci sono alcune pom snippet:
Genitore:
<project
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<prerequisites>
<maven>2.0.9</maven>
</prerequisites>
<modules>
<module>sub-project1</module>
<module>sub-project2</module>
</modules>
....
sub-progetto1:
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>parent</artifactId>
<groupId>mygroup</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>sub-project1</artifactId>
....
sub-progetto2:
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>parent</artifactId>
<groupId>mygroup</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>sub-project1</artifactId>
<dependencies>
....
<dependency>
<artifactId>sub-project2</artifactId>
<groupId>mygroup</groupId>
<version>1.0-SNAPSHOT</version>
<scope>import</scope>
</dependency>
</dependencies>
L'errore che ricevo quando ho avuto mvn clean install
il genitore è:
[ERROR] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Compilation failure
Con un sacco di classi/pacchetto non trovato errori
Soluzione
Si dovrebbe avere un pom maestro a livello del genitore, in cui potrete elencare i moduli del progetto.
<modules>
<module>sub-project1</module>
<module>sub-project2</module>>
</modules>
In ogni sottoprogetto si deve fare riferimento a un genitore:
<parent>
<artifactId>parent</artifactId>
<groupId>mygroup</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
e si specifica le dipendenze tra il progetto così come avete fatto. Credo che tu abbia perso alcuni dei passi che ho descritto.
Modifica: si dovrebbe emettere il tuo mvn clean install a livello genitore
.Altri suggerimenti
Quando faccio questo, Maven prova a scaricare l'sub-project1.jar file, che non esiste perché non è pronto per la repo di sicurezza.
Questo è il comportamento normale, Maven risolve le dipendenze attraverso il repository locale, quindi è necessario install
sub-progetto1 prima.In realtà, il modo più comune per affrontare questo tipo di situazione è quello di lanciare un reattore di costruire (un multi-moduli di costruire) da parte del genitore.
Supponendo che si stanno aggregando i moduli il genitore ovveroavete qualcosa di simile a questo dichiarato il "padre" pom.xml
:
<modules>
<module>sub-project1</module>
<module>sub-project2</module>>
</modules>
Solo cd
nella directory padre e il lancio di un reattore in costruzione:
$ cd parent
$ mvn install
Maven sarà quindi calcolare l'ordine di generazione (detratto dal orientato grafico fatto di moduli e loro dipendenze) ed eseguire install
su tutti i moduli nella calcolato ordine (genitore prima, quindi sub-progetto1 e, infine, sub-progetto2 per il tuo esempio).
Ma non utilizzare un ambito di applicazione di tipo import
, si sono utilizzati qui.Rimuoverlo.
Aggiornamento: La domanda è stata aggiornata, mentre stavo rispondendo e il POMs mostrato di non illustrare la situazione dato nella domanda originale (invertita dipendenza, probabile errore nel manufatto id).Ma l'approccio proposto si applica ancora.Rimuovere il <scope>import</scope>
sulla dipendenza e di avviare un reattore di costruire da parte del genitore.