2013-02-14 22 views
13

Not: Çözümü buldum ve kendim yanıtladı. Yine de, bu ayarın neden yanlış olduğunu ve soruna neden olduğu hakkında hiçbir fikrim yok. Jython ithalat sisteminin nasıl çalıştığına dair iyi bir açıklama yapmakla hala ilgileniyorum; Eğer kimse ödül kazanmayı umarsa, lütfen cevap verin.Jython modülünden Java sınıfları içe aktarılamıyor


Ben Python hesaplamaları yapmanız gereken varolan bir Java EE proje üzerinde çalışıyorum. Entegrasyon testlerinin ilk aşamalarındayım ama zaten bir sorunla karşı karşıyayım. Chapter 10 of Jython book'u okudum ama yine de bir çözüm bulamıyorum. Ayrıca Chapter 8'u (Kod Yeniden Kullanmaya İlişkin Modüller ve Paketler) okudum, ancak bana göre belirsiz.

Jython içe aktarma sisteminin nasıl çalıştığı ve nasıl yapılandırılacağı hakkında bir açıklama çok takdir edilecektir.

sorun:

$ 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 

Sorum şu: ne yanlış yapıyorum ve nasıl başarıyla BuildingType arayüzünü ithal etmek şeyler düzeltirim? Belki de problem CLASSPATH'da duruyor, ama hangi değerin uygun olabileceğine dair hiçbir fikrim yok.


Kod organizasyonu: Bir private Jython registry file tarafından tanımlanan

$ 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 

İthalat yolu:

$ 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 

ben sys.path ile kontrol edildikten çünkü Jython yolları alır eminim Jython istemi.

BuildingType.java

package pendulum.generator; 

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

"pendulum'dan deneyin.jeneratör ithal BuildingType" – sarwar

+0

ImportError: adı BuildingType – Paolo

+1

alamıyor jre/lib/ext jython.jar mi –

cevap

4

Deneme/yakalama yaklaşımında çok fazla zaman kaybettikten sonra cevabı kendim bulabildim.

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 

değil bu: .jython

şöyle görünecek şekilde sahip Özellikle

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 

, ithalat yoluna /path/to/project/build/classes ekleyerek yanlış yansıttığı bile (dosya sistemi hiyerarşisi), /path/to/project/build ise haklı ve sorunu çözdü.

4

Sen python.path yanı sıra CLASSPATH ayarlamak gerekir. aynı dizin düzeni ile

, bu benim için çalışıyor:

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 

Referans: Working with CLASSPATH (Jython Kitabı).

+0

Büyük teşekkürler. Sınıf yolunu ayarlamadan sınıflarımı komut satırından kullanamıyorum (java.lang.ClassNotFoundException'). Eclipse içinde tüm iyi çalıştı, ancak. – Paolo

İlgili konular