2013-02-14 14 views
13

नोट: मुझे समाधान मिला और मैंने जवाब दिया। हालांकि, मुझे नहीं पता कि यह सेटिंग गलत क्यों थी और समस्या का कारण बन गया। मुझे अभी भी ज्योथन आयात प्रणाली कैसे काम करती है, इस बारे में अच्छी व्याख्या करने में दिलचस्पी है; अगर कोई बक्षीस हासिल करने की परवाह करता है तो कृपया इसका उत्तर दें।जेथॉन मॉड्यूल से जावा कक्षाओं को आयात करने में असमर्थ


मैं मौजूदा जावा ईई प्रोजेक्ट पर काम कर रहा हूं जहां मुझे पायथन में कंप्यूटेशंस करने की आवश्यकता है। मैं एकीकरण परीक्षण के पहले चरण में हूं लेकिन मुझे पहले से ही एक समस्या का सामना करना पड़ रहा है। मैंने Chapter 10 of Jython book पढ़ा लेकिन अभी भी समाधान नहीं मिल रहा है। मैंने Chapter 8 (कोड पुन: उपयोग के लिए मॉड्यूल और पैकेज) भी पढ़ा लेकिन मेरे लिए यह अस्पष्ट है।

ज्योथन आयात प्रणाली कैसे काम करती है और इसे कॉन्फ़िगर करने के तरीके के बारे में एक स्पष्टीकरण की सराहना की जाएगी।

समस्या:

$ jython -v 
import: 'exceptions' as org.python.core.exceptions in builtin modules 
Jython 2.5.3 (2.5:c56500f08d34+, Aug 13 2012, 14:54:35) 
[Java HotSpot(TM) Server VM (Oracle Corporation)] on java1.7.0_10 
import: import site # precompiled from /home/me/jython/2.5.3/Lib/site$py.class 
import: 'sys' as sys in builtin modules 
import: import os # precompiled from /home/me/jython/2.5.3/Lib/os$py.class 
import: 'errno' as org.python.modules.errno in builtin modules 
import: 'posix' as org.python.modules.posix.PosixModule in builtin modules 
import: import posixpath # precompiled from /home/me/jython/2.5.3/Lib/posixpath$py.class 
import: import stat # precompiled from /home/me/jython/2.5.3/Lib/stat$py.class 
import: 'java' as java package 
import: 'File' as java class 
import: 'IOException' as java class 
import: 'org' as java package 
import: 'Py' as java class 
Type "help", "copyright", "credits" or "license" for more information. 

>>> import pendulum.generator.BuildingType 
import: import pendulum # precompiled from /path/to/project/build/classes/pendulum/__init__$py.class 
import: import pendulum.generator # precompiled from /path/to/project/build/classes/pendulum/generator/__init__$py.class 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ImportError: No module named BuildingType 

मेरा प्रश्न है: क्या मैं गलत कर रहा हूँ और मैं चीजों को BuildingType इंटरफ़ेस आयात करने के लिए सफलतापूर्वक कैसे ठीक करूं? शायद समस्या क्लास्स्पैट में खड़ी है, लेकिन मुझे नहीं पता कि कौन सा मूल्य उपयुक्त हो सकता है।


कोड संगठन:

$ tree build/classes/pendulum/generator/ src/pendulum/generator/ 
build/classes/pendulum/generator/ 
├── BuildingType.class 
├── __init__.py 
└── __init__$py.class 

src/pendulum/generator/ 
├── BuildingType.java 
└── __init__.py 

आयात पथ एक private Jython registry file द्वारा परिभाषित:

$ cat ~/.jython 
python.path=\ 
/path/to/project/build/classes:\ 
/path/to/project/src:\ 
/home/me/jdevel/extras/2.5.3/Lib:\ 
/home/me/jdevel/extras/2.5.3/Lib/site-packages 

मुझे यकीन है कि Jython रास्तों को चुनता है, क्योंकि मैं sys.path साथ की जाँच की है कि कर रहा हूँ ज्योथन प्रॉम्प्ट पर।

BuildingType.java

package pendulum.generator; 

public interface BuildingType { 
    public String getBuildingName(); 
    public String getBuildingAddress(); 
    public String getBuildingId(); 
} 
+0

"पेंडुलम से" आज़माएं।जेनरेटर आयात बिल्डिंग टाइप " – sarwar

+0

आयात त्रुटि: नाम आयात नहीं कर सकता बिल्डिंग टाइप – Paolo

+1

jython.jar jre/lib/ext में है? –

उत्तर

4

कोशिश/पकड़ दृष्टिकोण में बहुत समय बर्बाद होने के बाद मैं स्वयं जवाब ढूंढ पाया।

.jython है इस तरह देखने के लिए:

python.path=\ 
/path/to/project/build:\ 
/path/to/project/src:\ 
/home/me/jdevel/extras/2.5.3/Lib:\ 
/home/me/jdevel/extras/2.5.3/Lib/site-packages 

नहीं इस:

python.path=\ 
/path/to/project/build/classes:\ 
/path/to/project/src:\ 
/home/me/jdevel/extras/2.5.3/Lib:\ 
/home/me/jdevel/extras/2.5.3/Lib/site-packages 

विशेष रूप से, आयात पथ के लिए /path/to/project/build/classes जोड़ने गलत है (भले ही दर्शाता है फाइल सिस्टम पदानुक्रम), जबकि /path/to/project/build सही है और इस मुद्दे को हल किया गया है।

4

आप python.path रूप CLASSPATH सेट करने के लिए और साथ ही जरूरत है।

समान निर्देशिका लेआउट के साथ, यह मेरे लिए काम करता है:

jython10$ CLASSPATH=build/classes/ jython -v Building.py 
import: 'exceptions' as org.python.core.exceptions in builtin modules 
import: import site # precompiled from /usr/local/Java/jython2.5.3/Lib/site$py.class 
import: 'sys' as sys in builtin modules 
import: import os # precompiled from /usr/local/Java/jython2.5.3/Lib/os$py.class 
import: 'errno' as org.python.modules.errno in builtin modules 
import: 'posix' as org.python.modules.posix.PosixModule in builtin modules 
import: import posixpath # precompiled from /usr/local/Java/jython2.5.3/Lib/posixpath$py.class 
import: import stat # precompiled from /usr/local/Java/jython2.5.3/Lib/stat$py.class 
import: java package as '/Users/sdm7g/jaxp/jython10/build/classes/pendulum' 
import: 'pendulum' as java package 
import: 'pendulum' as java package 
import: java package as '/Users/sdm7g/jaxp/jython10/build/classes/pendulum/generator' 
import: 'pendulum.generator' as java package 
import: 'BuildingType' as java class 

संदर्भ: Working with CLASSPATH (Jython पुस्तक)।

+0

बड़ा धन्यवाद। क्लासपाथ सेट किए बिना मैं कमांड लाइन ('java.lang.ClassNotFoundException') से अपने वर्गों का उपयोग करने में असमर्थ था। ग्रहण के भीतर से सभी ठीक काम किया, हालांकि। – Paolo

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