Domanda

Ho appena finito di convertire uno dei nostri progetti quadro interni da Ant a Maven. La build Maven funziona bene e si distribuisce nel nostro repository senza problemi.

Il problema è quando altri progetti cercano di consumare il framework, non funziona. L'unica cosa scaricata è il framework di alto livello POM.

Ho provato ad aggiungere alcune voci di dipendenza a uno o più dei vari moduli, ma non importa quale aggiungo, ricevo un errore di dipendenza circolare. Ho anche provato a creare un file POM di 2 ° livello di alto livello senza moduli e alcune dipendenze per sovrascrivere quello nel gestore del repository. Ciò provoca da scaricare alcune delle dipendenze, ma poi la build Maven si bloccherà in luoghi casuali. Sulla base di Windows Task Manager, sembra che sia in un ciclo infinito. Quindi un 2 ° file POM non sembra essere la risposta (o sto facendo male).

Il mio file POM framework assomiglia a questo:

<project>
  <modelVersion>4.0.0</modelVersion>

  <groupId>framework_snt</groupId>
  <artifactId>SFP</artifactId>
  <packaging>pom</packaging>
  <name>SFP framework</name>
  <version>6.3</version>

  <modules>
.... 50+ modules here
  </modules>

E poi le solite proprietà, gestione delle dipendenze e voci di gestione del pluginmanement per un POM di alto livello.

Nel modulo consumante ho solo quanto segue:

<dependency>
  <groupId>framework_snt</groupId>
  <artifactId>SFP</artifactId>
  <version>6.3</version>
  <type>pom</type>
</dependency>

Questo è al POM di alto livello, quindi tutti i sottomoduli hanno accesso alle librerie del framework per semplificare gli sviluppatori.

Come posso impostare le cose in modo che tutti i file JAR dipendenti vengano scaricati dai miei progetti di consumo?

È stato utile?

Soluzione

Sembra che il tuo progetto framework produca diversi artefatti JAR, uno per ogni modulo figlio, ma nessun artefatto JAR per il progetto principale. Pertanto, dichiarare una dipendenza dal POM del progetto genitore non è quello che vuoi fare. Invece è necessario dichiarare una dipendenza da ciascuno dei moduli figlio del progetto del tuo framework.

Ho una configurazione simile in cui ho un progetto "toolkit" con diversi moduli (ciascuno che produce un artefatto Jar). Quindi negli altri miei progetti dichiaro dipendenze da qualsiasi moduli che devo usare. Tuttavia, non dichiaro una dipendenza dal mio file POM "Toolkit". Invece dichiaro solo dipendenze dai moduli del bambino artefatti JAR.

<dependency>
  <groupId>com.mycompany.toolkits</groupId>
  <artifactId>file-utils</artifactId>
  <version>1.0.0</version>
</dependency>

Si noti che la mia dichiarazione di dipendenza indica uno dei moduli di mio figlio e non dichiara <type>pom</type> Come hai fatto tu. Se volessi essere davvero esplicito potresti dichiarare <type>jar</type> invece.

Altri suggerimenti

Il framework pom come chiami è il parent POM del tuo progetto multi-modulo.

Mentre i moduli possono dipendere l'uno dall'altro, non possono dipendere da questo POM genitore. Questo è ciò che probabilmente sta causando la dipendenza circolare.

Dovrai ritirare i moduli e identificare quali moduli dipendono da quali e appropriatamente specificare le dipendenze. Inoltre, queste dipendenze sono in genere jar Dipendenze: un packaging che conterrà fonti e risorse.

Maven per esempio è una delle tante risorse disponibili che fornisce ulteriori informazioni.

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