2011-10-29 2 views
8

Ho un'area di lavoro Scala multi-progetto in eclissi. Penso di essere schiacciato dalla mia mancanza di comprensione del modo in cui Scala importa i pacchetti, ma dopo aver trascorso più tempo di quanto mi importi ad ammettere di cercare una soluzione, non riesco a capirlo. Ho ricreato il problema in una semplice installazione di 2 progetti.Importa pacchetto relativo Scala

Progetto 1: com.foo.mathematics contiene una semplice classe Vector

contiene un file:

package com.foo.mathematics  

class Vector2D(x : Double, y : Double) { 



    def length = math.sqrt(x*x + y*y) 

} 

Progetto 2: com.foo.analysis

package com.foo.analysis 

import com.foo.mathematics.Vector2D 



class Frame(xAxis : Vector2D, yAxis : Vector2D) { 



} 

Eclipse mostra un errore nella riga di importazione, il messaggio di errore che ottengo è: Object mathematics non è un membro del pacchetto com.foo.

Nella vista struttura, la mia istruzione import dice questo:

com.foo.analysis.<error: <none>>.Vector2D 

Ho provato a cambiare l'importazione di:

import mathematics.Vector2D 

import _root_.com.foo.mathematics.Vector2D 

né si lavora ...

Che cosa sono io mancante?

+3

Prova a pulire tutti i progetti. Costruisci il progetto 1, quindi nel progetto 2, elimina la linea di importazione, quindi prova a digitare "import com.fo [CTRL-SPACE]", completa? Se lo fa, digita di nuovo CTRL-SPACE, offre 'mathmatics' e' analysis'? – huynhjl

+0

Sono riuscito a risolverlo con un uso _root_ di mano pesante. – fbl

risposta

6

Entrambi import com.foo.mathmatics.Vector2D e import _root_.com.foo.mathmatics.Vector2D dovrebbero andare bene. Molto probabilmente non hai aggiunto il primo progetto al percorso di costruzione del secondo (vedi Build Path>Configure Build Path nel menu di scelta rapida), oppure è necessario pulire il secondo progetto (Project>Build Clean) dopo aver apportato le modifiche nel primo progetto.

(Inoltre, mathmatics sembra un errore di battitura per mathematics, in modo doppio controllo che davvero hanno lo stesso nome in entrambi i luoghi.)

pacchetto relativo alle importazioni non entrano in esso, semplicemente significa che si potrebbero scrivere in questo modo:

package com.foo 
package analysis 
import mathmatics.Vector2D 

class Frame(xAxis : Vector2D, yAxis : Vector2D) { 

} 
+0

Grazie. Ho scritto male nella mia domanda iniziale (i pericoli di porre domande alle 2:00 del mattino), ma il codice andava bene. Sono riuscito a risolvere il problema nel mio progetto "reale" applicando deliberatamente _root_ import ad ogni importazione in ogni file .scala nei progetti. Dopo diversi cicli di pulizia/costruzione, penso di averlo funzionante. Un'altra cosa che dovevo fare occasionalmente era rimuovere la libreria dipendente dal mio percorso di build e quindi aggiungerla di nuovo. Non sono sicuro del motivo per cui ciò ha aiutato, ma è stato così. – fbl

+0

'_root_' non dovrebbe essere necessario se tu 1) segui la normale convenzione dell'URL invertita (che sembri fare) e 2) non abbia pacchetti chiamati' com', 'org', ecc nidificati in altri pacchetti. Strano ... hai l'ultimo IDE Scala (2.0 beta 11)? L'ultima volta che ho avuto problemi di dipendenza come questa è stata piuttosto poche versioni fa. –

+0

Ho l'ultimo IDE di Scala e la versione di Eclipse. La cosa '_root_' non è poi così male una volta che sai cosa devi fare. Grazie per l'aiuto. – fbl