2010-08-12 9 views
6

Così, ho la seguente configurazione in Eclipse (Java):ottenendo il seguente errore di generazione: "il tipo {---} non può essere risolto è indirettamente riferimento dal file necessari .class"

  1. Ho un progetto (chiamiamo questo "progetto 1") che fornisce un'interfaccia (che è un pacchetto privato)
  2. Ho un altro progetto ("progetto 2") che contiene un pacchetto dal progetto 1 ... Classi in questo pacchetto estendere le interfacce private del pacchetto in "progetto 1" e fornire una bella interfaccia pubblica.
  3. Ora, ho "progetto 3" che fa riferimento a "progetto 2". Progetto 3 utilizza quindi l'oggetto pubblico prevista nel progetto 2.

Dopo aver chiamato il costruttore dal progetto di 2 a 3 del progetto, ottengo il seguente:

"il tipo {---} non può essere risolto. è indirettamente referenziato dai file .class richiesti "

Se aggiungo un riferimento al progetto 1 dal progetto 3, tutto va bene. C'è un modo per NON dover fare riferimento al progetto 3 in questo modo? Non ha senso riferirsi a esso.

Sto usando Eclipse (Helios) con il più recente JDK ecc ...

+0

Stiamo parlando di base Java o OSGi (sviluppo di plugin di eclissi o RCP)? Con OSGi, ogni plugin (-project) verrà caricato da un classloader separato e questo potrebbe spiegare anche i tuoi problemi. –

+0

stiamo parlando delle dipendenze di Java e dei progetti di base – Polaris878

risposta

7

Si tratta di una "dipendenza transitiva". È necessario sul percorso di classe tutte le classi richieste da qualsiasi classe utilizzata. Quindi è necessario avere le classi dal progetto 1 nel classpath in qualche modo: ad esempio, è possibile comprimerle come .jar. Oppure puoi andare a Build Path > Order and Export del Progetto 2 e contrassegnare il Progetto 1 come esportato.

Una cosa importante è che le dipendenze del progetto sono un mero sviluppo "goodie" - quando si esegue il programma standalone (o lo si distribuisce nel contenitore), le dipendenze del progetto Eclipse sono sparite. Quindi devi assicurarti che le tue dipendenze siano soddisfatte.

+0

In realtà, questo non è strettamente vero per quanto riguarda il percorso di classe tempo di compilazione ... è possibile che le vostre dipendenze abbiano delle dipendenze di cui non dovete sapere nulla. Aggiungere dipendenze esplicite su ogni dipendenza esplicita di un vaso che utilizzi sarebbe un onere eccessivo. Tali dipendenze devono essere disponibili in fase di esecuzione, ma non al momento della compilazione. –

+0

So che questo è vero perché Eclipse registra spesso un messaggio di errore simile a quello che l'OP accenna se sta tentando di calcolare o visualizzare l'insieme di supertipi di una classe ma non può non aver tutti i supertipi sul classpath sta usando per fare il calcolo. Lo fa per molti progetti di lavoro senza problemi di runtime. –

2

Non so se questo è quello che stai cercando. Prova questo -

  1. In Eclipse, fare clic destro Progetto2, selezionare costruire il percorso ->Configure Build Path
  2. Vai a Ordine e Esporta scheda. dovrebbe avere Project1 elencato. Controlla la scatola di fronte ad essa.
  3. Ricostruisci i tuoi progetti.

Fondamentalmente, si sta esportando la dipendenza Project1 da project2. Quindi qualsiasi progetto che aggiunge project2 come dipendenza vedrà anche Project1 senza doverlo aggiungere esplicitamente al classpath. Eclipse lo farà in modo trasparente.

Problemi correlati