2011-10-29 18 views
8

मेरे पास ग्रहण में एक बहु-परियोजना स्कैला कार्यक्षेत्र है। मुझे लगता है कि स्कैला पैकेजों को आयात करने के तरीके की समझ में कमी के कारण मुझे परेशान हो रहा है, लेकिन समाधान की तलाश करने के लिए मुझे अधिक समय देने के बाद, मैं इसे समझ नहीं सकता। मैंने एक साधारण 2 परियोजना सेटअप में समस्या को फिर से बनाया है।स्कैला के सापेक्ष पैकेज आयात

परियोजना 1:

package com.foo.mathematics  

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



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

} 

परियोजना 2: com.foo.analysis

package com.foo.analysis 

import com.foo.mathematics.Vector2D 



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



} 

ग्रहण एक से पता चलता com.foo.mathematics एक सरल वेक्टर वर्ग

एक फ़ाइल शामिल होता है आयात लाइन में त्रुटि, मुझे जो त्रुटि संदेश मिलता है वह है: ऑब्जेक्ट गणित पैकेज com.foo का सदस्य नहीं है।

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

मैं करने के लिए आयात को बदलने की कोशिश की है:

रूपरेखा ध्यान में रखते हुए, मेरे आयात बयान इस कहते हैं

import mathematics.Vector2D 

import _root_.com.foo.mathematics.Vector2D 

दोनों में से कोई काम करता है ...

मैं क्या कर रहा हूँ लापता?

+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 दोनों ठीक होना चाहिए। सबसे अधिक संभावना है कि आपने या तो दूसरे के निर्माण पथ में पहली परियोजना नहीं जोड़ा है (संदर्भ मेनू में Build Path>Configure Build Path देखें), या पहली परियोजना में परिवर्तन करने के बाद दूसरी परियोजना (Project>Build Clean) को साफ़ करने की आवश्यकता है।

(इसके अलावा, mathmaticsmathematics के लिए लिखने में कोई त्रुटि है, तो दोहरी जांच तुम सच में दोनों स्थानों पर एक ही नाम है कि तरह दिखता है।)

सापेक्ष पैकेज आयात इसे में नहीं आते हैं, वे तो बस आप लिख सकता है मतलब यह इस तरह:

package com.foo 
package analysis 
import mathmatics.Vector2D 

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

} 
+0

धन्यवाद। मैंने अपने मूल प्रश्न (2:00 बजे प्रश्न पूछने के खतरे) में गलत टाइप किया था, लेकिन कोड ठीक था। मैंने परियोजनाओं में प्रत्येक .scala फ़ाइल में हर आयात के लिए _root_ आयात को जानबूझ कर लागू करके 'असली' परियोजना में इस मुद्दे को हल करने में कामयाब रहे। कई स्वच्छ/निर्माण चक्रों के बाद मुझे लगता है कि मैंने यह काम किया है। एक और चीज जो मुझे कभी-कभी करना पड़ती थी वह मेरे निर्माण पथ से आश्रित पुस्तकालय को हटा देती थी और फिर इसे फिर से जोड़ती थी। यकीन नहीं है कि क्यों मदद की लेकिन यह किया। – fbl

+0

'_root_' की आवश्यकता नहीं है यदि आप 1) सामान्य रिवर्स किए गए यूआरएल सम्मेलन (जो आपको लगता है) का पालन करें और 2) अन्य पैकेजों में घोंसला वाले 'कॉम', 'ओआरजी' नामक पैकेज नहीं हैं। अजीब ... क्या आपके पास नवीनतम स्कैला आईडीई (2.0 बीटा 11) है? पिछली बार जब इस तरह निर्भरता की समस्याएं थीं तो कुछ संस्करण पहले थे। –

+0

मेरे पास नवीनतम स्कैला आईडीई और ग्रहण का संस्करण है। एक बार जब आपको पता चले कि आपको क्या करना है तो '_root_' चीज बहुत खराब नहीं है। सहायता के लिए धन्यवाद। – fbl

संबंधित मुद्दे