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

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top