2011-10-29 2 views
8

나는 일식의 멀티 프로젝트 스칼라 작업 공간을 가지고있다. 나는 스칼라 패키지를 가져 오는 방법에 대한 이해의 나의 부족으로 묶였던지고 있다고 생각,하지만 난 솔루션을 찾고 인정 걱정보다 더 많은 시간을 보낸 이후, 나는이 일을 알아낼 수 없습니다. 간단한 2 프로젝트 설정에서 문제를 재현했습니다.스칼라의 상대 패키지 수입은

프로젝트 1 :

package com.foo.analysis 

import com.foo.mathematics.Vector2D 



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



} 

이클립스가 표시 com.foo.analysis :

package com.foo.mathematics  

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



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

} 

프로젝트 2 : com.foo.mathematics는

하나 개의 파일을 포함하는 간단한 벡터 클래스를 포함 가져 오기 줄에 오류가 있습니다. 오류 메시지는 다음과 같습니다. Object mathematics가 com.foo 패키지의 구성원이 아닙니다. 어떻게 생각

...

import mathematics.Vector2D 

import _root_.com.foo.mathematics.Vector2D 

둘 중 하나가 작동하지 않습니다 :

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

I가 가져 오기를 변경 시도 : 개요보기에서

내 import 문이 말한다 있어야 할 곳에 없는?

+3

모든 프로젝트를 정리하십시오. 프로젝트 1을 빌드하고, 프로젝트 2에서 가져 오기 라인을 삭제 한 다음,'import com.fo [CTRL-SPACE]'를 입력하여 완성합니까? 그렇다면 CTRL-SPACE를 다시 입력하십시오. '수학'과 '분석'을 제공합니까? – huynhjl

+0

무거워 _root_ 사용법으로 해결할 수있었습니다. – fbl

답변

6
모두 import com.foo.mathmatics.Vector2D

import _root_.com.foo.mathmatics.Vector2D 잘해야한다. 대부분의 경우 당신이 하나가 두 번째의 빌드 경로에 첫 번째 프로젝트를 추가하지 않은 (상황에 맞는 메뉴에서>Configure Build PathBuild Path 참조), 또는 첫 번째 프로젝트에서 변경 한 후 두 번째 프로젝트 (Project>Build Clean)를 청소해야합니다.

은 (또한, mathmatics 당신이 정말로 두 곳에서 같은 이름을 가지고 mathematics에 대한 오타, 그래서 한 번 확인 것 같습니다.)

수입은 그것으로 오지 않는 상대 패키지, 그들은 당신이 쓸 수있는 의미 이 방법 :

package com.foo 
package analysis 
import mathmatics.Vector2D 

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

} 
+0

감사합니다. 나는 원래의 질문 (오전 2시에 질문하는 것의 위험)에 잘못 입력 했었지만 코드는 괜찮았다. 나는 매우 신중하게 프로젝트의 모든 .scala 파일의 모든 수입에 _root_ 수입을 적용하여 내 '진짜'프로젝트의 문제를 해결하기 위해 관리. 여러 번의 청소/빌드 사이클 후에 나는 그것이 작동한다고 생각합니다. 가끔해야했던 또 하나의 작업은 빌드 경로에서 종속 라이브러리를 제거한 다음 다시 추가하는 것이 었습니다. 그게 왜 도움이되었는지는 모르지만 그랬습니다. – fbl

+0

'는 1) 일반 반전 URL의 규칙을 따릅니다 (당신이해야 할 것 같다있는) 2) 등 org'','com'라는 다른 패키지 내에 중첩 된 패키지가없는 경우 _root_'이 필요하지 않을 것이다. Strange ... 최신 스칼라 IDE (2.0 베타 11)를 가지고 있습니까? 마지막으로 필자가 이와 같은 의존성 문제를 겪은 것은 꽤 오래 전이었다. –

+0

저는 최신 스칼라 IDE와 Eclipse 버전을 가지고 있습니다. '_root_' 것은 당신이해야 할 일을 알게되면 나쁘지 않습니다. 도와 주셔서 감사합니다. – fbl