2011-10-29 4 views
8

Tôi có một không gian làm việc Scala đa dự án trong nhật thực. Tôi nghĩ rằng tôi bị hosed bởi sự thiếu hiểu biết của tôi về cách Scala nhập khẩu các gói, nhưng sau khi dành nhiều thời gian hơn tôi quan tâm để thừa nhận tìm kiếm một giải pháp, tôi không thể hình này ra. Tôi đã tạo lại vấn đề trong một thiết lập 2 dự án đơn giản.Nhập gói tương đối của Scala Nhập

Dự án 1: com.foo.mathematics chứa một lớp Vector đơn giản

Chứa một file:

package com.foo.mathematics  

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



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

} 

Dự án 2: com.foo.analysis

package com.foo.analysis 

import com.foo.mathematics.Vector2D 



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



} 

Eclipse cho thấy một lỗi trong dòng nhập, Thông báo lỗi mà tôi nhận được là: Đối tượng toán học không phải là thành viên của gói com.foo.

Trong giao diện phác thảo, tuyên bố nhập khẩu của tôi nói điều này:

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

Tôi đã thử thay đổi khẩu để:

import mathematics.Vector2D 

import _root_.com.foo.mathematics.Vector2D 

không một hoạt động ...

Tôi gì còn thiếu?

+3

Cố gắng xóa tất cả các dự án. Xây dựng dự án 1, sau đó trong dự án 2, xóa dòng nhập, sau đó thử gõ 'import com.fo [CTRL-SPACE]', nó có hoàn thành không? Nếu có, hãy gõ CTRL-SPACE lần nữa, nó có cung cấp 'mathmatics' và' analysis' không? – huynhjl

+0

Tôi đã cố gắng sửa nó bằng cách sử dụng _root_ nặng. – fbl

Trả lời

6

Cả import com.foo.mathmatics.Vector2Dimport _root_.com.foo.mathmatics.Vector2D sẽ không sao. Có thể bạn chưa thêm dự án đầu tiên vào đường dẫn xây dựng thứ hai (xem Build Path>Configure Build Path trong menu ngữ cảnh) hoặc cần dọn dẹp dự án thứ hai (Project>Build Clean) sau khi thực hiện các thay đổi trong dự án đầu tiên.

(Ngoài ra, mathmatics trông giống như một typo cho mathematics, vì vậy kiểm tra lại mà bạn thực sự có cùng tên ở cả hai nơi.)

gói tương nhập khẩu không đi vào nó, họ chỉ có nghĩa là bạn có thể viết theo cách này:

package com.foo 
package analysis 
import mathmatics.Vector2D 

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

} 
+0

Cảm ơn. Tôi đã nhầm lẫn trong câu hỏi ban đầu của tôi (những nguy hiểm của đặt câu hỏi lúc 2:00 AM), nhưng mã là tốt. Tôi quản lý để giải quyết vấn đề trong dự án 'thực sự' của tôi bằng cách cố tình áp dụng _root_ nhập khẩu cho mỗi lần nhập trong mọi tệp .scala trong các dự án. Sau một vài chu kỳ làm sạch/xây dựng, tôi nghĩ rằng tôi có nó hoạt động. Một thứ khác mà đôi khi tôi phải làm là xóa thư viện phụ thuộc khỏi đường dẫn xây dựng của tôi và sau đó thêm lại nó. Không chắc tại sao điều đó lại giúp ích được. – fbl

+0

'_root_' không cần thiết nếu bạn 1) tuân thủ quy ước URL đảo ngược bình thường (bạn dường như làm) và 2) không có gói được gọi là' com', 'org', v.v. được lồng trong các gói khác. Lạ ... Bạn có Scala IDE mới nhất (2.0 beta 11) không? Lần cuối cùng tôi gặp vấn đề về sự phụ thuộc như thế này là một vài phiên bản trước đây. –

+0

Tôi có IDE Scala mới nhất và phiên bản Eclipse. Điều '_root_' không quá tệ khi bạn biết mình cần làm gì. Cảm ơn đã giúp đỡ. – fbl