2013-06-20 11 views
7

Il problema nel registro in eclissi mostra "Un ciclo è stato rilevato nel percorso di costruzione del progetto ...." Qualche idea su cosa fare per sbarazzarsi di queste dipendenze cicliche? Non so quali progetti dipendono l'uno dall'altro.Come risolvere la dipendenza ciclica tra diversi moduli in un progetto in eclissi?

+0

È possibile copiare/incollare l'intero messaggio di errore nella domanda? Nota: è possibile determinare quali dipendenze esistono per un progetto facendo clic con il pulsante destro del mouse, scegliendo Proprietà e andando a Riferimenti progetto. –

+0

Inoltre, i riferimenti di progetto non sono in genere impostati per errore. Stai usando un sistema di build, come Maven? –

+0

Sto usando il sistema di build Ant. –

risposta

2

Nell'impostazione del progetto è possibile visualizzare le dipendenze, ciò che si potrebbe fare è rimuovere tutte le dipendenze e aggiungere un dep dopo l'altro. Un ciclo significa che non avresti dovuto farlo in quel modo. Le vostre soluzioni dopo aver identificato le classi, lasciano dice il vostro progetto grande A è che richiede Classe CB1 da secondaria Progetto B e CB1 si richiedono classe CA1 dal progetto A:

  • Spostare una classe CB1 nel progetto A per rimuovere la dipendenza - -> funziona se non crea più dipendenze.
  • estrae le interfacce e utilizza interfacce non dipendenti (potrebbe essere necessario creare una super classe o più interfacce a seconda della struttura).
  • implementare in modo diverso, perché hai specificamente bisogno di classe da un altro progetto? prova ad utilizzare le classi genitore comuni se esistenti
+0

Un suggerimento per qualcuno che utilizza più di 2 plug-in (stiamo utilizzando più di 700) e ottenendo quell'errore ad esempio durante l'unione: Se andrai nel tuo manifest (MANIFEST.MF) -> Dipendenze (scheda) -> Dipendenza Analisi che hai lì "Cerca i cicli nel grafico delle dipendenze" che ti mostrerà dove hai quei loop. Quindi sarà più facile scoprire da dove iniziare. Saluti. – mtfk

12

È possibile regolare la gravità dipendenze circolare eclisse:

Preferences > Java > Compiler > Building > Build path problems > Circular dependencies 
+1

Questo non risolve il problema. Lo seppellisce semplicemente. –

+1

@ Joris: ciò che hai suggerito è una soluzione temporanea a questo problema. Haan l'applicazione funziona bene con questa impostazione, ma in seguito potrebbe rivelarsi un problema più grande in quanto può causare errori indesiderati nell'applicazione. –

+1

Grazie amico !!!! Il mio problema NON era con Maven (funziona dalla console) ma con lo stupido Eclipse. – MeIr

3

Una dipendenza ciclica eclisse indica che v'è un ciclo in buildpaths tra i progetti in Eclipse.

Quindi, se si dispone di 5 progetti, dire A, B, C, D ed E, poi una dipendenza ciclica potrebbe essere che:

  1. A richiede B nel suo accumulo percorso
  2. B richiede D nel suo accumulo percorso
  3. S richiede un nel suo accumulo percorso

Quindi A->B->D->A è un ciclo.

A causa di questo ciclo, Eclipse non sa quale progetto compilare per primo.

È necessario rifattorizzare il codice per rimuovere questa dipendenza ciclica. O se il codice effettivo non ha tali dipendenze, rimuovere le voci del percorso di generazione che non sono necessarie.

0

Per scoprire le dipendenze tra progetti Java semplici, vedere Proprietà progetto | Percorso di costruzione Java | Progetti. Se si dispone di progetti J2EE, è disponibile un'impostazione aggiuntiva in Proprietà progetto | Referenze del progetto. Verifica quelli per tutti i tuoi progetti, crea il grafico su un pezzo di carta (o schermo) e guarda cosa puoi fare per interrompere il ciclo.

In genere, un grafico di dipendenza sano ha la forma di una stella, con un progetto principale contenente risorse comuni e ciascun progetto foglia che implementa alcune funzionalità utente specifiche. In dettaglio, il nucleo può infatti consistere di diversi progetti interdipendenti; lo stesso per le foglie più grandi.

Un tipico modo per uscire da un ciclo di dipendenze è la fusione di diversi progetti strettamente collegati.

0

Potrebbe essere necessario rifattorizzare i progetti o il codice stesso. Potrebbe essere un problema con la confezione con l'applicazione.

0

Ho avuto a che fare con questo problema molto tempo fa, e anche se ho dimenticato come ho risolto quello, quando si trattava di comunicare da una classe nel progetto richiesto a uno nel progetto richiesto, ho avuto il sendee installa un oggetto java.lang.reflect.Method nel mittente, dove può essere invocato senza dichiarare la classe del destinatario all'interno del codice del mittente.

Sono sicuro che ci sono modi migliori per farlo, come avere il mittente e il mittente condividere un'interfaccia, ma in termini di economia di codifica, questo sembra essere il più semplice.

Come sembra suggerire altre risposte, questa non sembra essere una vera circolarità, ma piuttosto un artefatto del design di Eclipse.

2

Ci sono tre modi per rimuovere dipendenza ciclica tra i progetti in Eclipse,

1.Go di Progetto-> java compiler-> Edificio -> Abilita impostazioni specifiche di progetto.
Selezionare i problemi del percorso di generazione e fornire un avviso come opzione per la dipendenza circolare.

2. Vai a project-> percorso di configurazione java. Nella scheda progetti, seleziona il progetto e rimuovi.

3. Accedere alla cartella META-INF, aprire MANIFEST.MF. Nella tua scheda di visualizzazione MANIFEST.MF, puoi vedere il progetto dipendente ciclicamente nella colonna "Importa pacchetto:".
Rimuovi il progetto dalla colonna.

La prima opzione in realtà non risolve l'errore. La seconda e la terza opzione sono il modo giusto per risolvere questa dipendenza.

Problemi correlati