2011-10-29 9 views
8

Tengo un espacio de trabajo de Scala multiproyecto en eclipse. Creo que me molesta mi falta de comprensión sobre la forma en que Scala importa los paquetes, pero después de pasar más tiempo del que me importa admitir que busco una solución, no puedo entender esto. Recreé el problema en una configuración simple de 2 proyectos.Importaciones de paquete relativo de Scala

Proyecto 1: com.foo.mathematics contiene una sencilla clase Vector

Contiene un archivo:

package com.foo.mathematics  

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



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

} 

Proyecto 2: com.foo.analysis

package com.foo.analysis 

import com.foo.mathematics.Vector2D 



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



} 

Eclipse muestra una error en la línea de importación, el mensaje de error que recibo es: Object mathematics no es un miembro del paquete com.foo.

En la vista de esquema, mi declaración de importación dice esto:

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

He intentado cambiar a la importación:

import mathematics.Vector2D 

import _root_.com.foo.mathematics.Vector2D 

no se trabaja ...

¿Qué soy yo ¿desaparecido?

+3

Intenta limpiar todos los proyectos. Genere el proyecto 1, luego en el proyecto 2, elimine la línea de importación y luego intente escribir 'import com.fo [CTRL-SPACE]', ¿se completa? Si lo hace, escriba CTRL-SPACE nuevamente, ¿ofrece 'mathmatics' y' analysis'? – huynhjl

+0

Logré solucionarlo con un uso _root_ de mano dura. – fbl

Respuesta

6

Ambos import com.foo.mathmatics.Vector2D y import _root_.com.foo.mathmatics.Vector2D deberían estar bien. Lo más probable es que no haya agregado el primer proyecto a la ruta de compilación del segundo (consulte Build Path>Configure Build Path en el menú contextual) o necesite limpiar el segundo proyecto (Project>Build Clean) después de realizar cambios en el primer proyecto.

(También, mathmatics se parece a un error tipográfico para mathematics, por lo que vuelve a comprobar que realmente tiene el mismo nombre en ambos lugares.)

paquete relativa importaciones no entren en ella, simplemente significa que usted podría escribir de esta manera:

package com.foo 
package analysis 
import mathmatics.Vector2D 

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

} 
+0

Gracias. Había escrito mal mi pregunta original (los peligros de hacer preguntas a las 2:00 AM), pero el código estaba bien. Logré resolver el problema en mi proyecto "real" al aplicar deliberadamente _root_ imports a cada importación en cada archivo .scala en los proyectos. Después de varios ciclos de limpieza/construcción creo que lo tengo funcionando. Otra cosa que tuve que hacer ocasionalmente fue eliminar la biblioteca dependiente de mi ruta de compilación y luego volver a agregarla. No estoy seguro de por qué eso ayudó, pero lo hizo. – fbl

+0

'_root_' no debería ser necesario si 1) sigues la convención normal de URL invertida (que pareces hacer) y 2) no tienes paquetes llamados' com', 'org', etc. anidados dentro de otros paquetes. Extraño ... ¿Tienes el último Scala IDE (2.0 beta 11)? La última vez que tuve problemas de dependencia como esta fue hace bastantes versiones. –

+0

Tengo el último IDE de Scala y la versión de Eclipse. La cosa '_root_' no es tan mala una vez que sabes lo que tienes que hacer. Gracias por la ayuda. – fbl

Cuestiones relacionadas