Uwaga: Znalazłem rozwiązanie i odpowiedziałem sam. Chociaż nie mam pojęcia, dlaczego to ustawienie było złe i spowodowało problem. Nadal jestem zainteresowany dobrym wyjaśnieniem, jak działa system importowania Jython; jeśli ktoś chce zdobyć nagrodę, proszę o odpowiedź.Nie można importować klas Java z modułu Jython
Pracuję nad istniejącym projektem Java EE, w którym muszę wykonać obliczenia w języku Python. Jestem na pierwszych etapach testów integracyjnych, ale już mam problem. Czytam Chapter 10 of Jython book, ale nadal nie mogę znaleźć rozwiązania. Przeczytałem także Chapter 8 (Moduły i pakiety do ponownego użycia kodu), ale dla mnie jest to niejasne.
Bardzo ważne jest wyjaśnienie, jak działa system importowania Jython i jak go skonfigurować.
Problem:
$ 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
Moje pytanie brzmi: co robię źle i jak to naprawić rzeczy do importu interfejsu BuildingType powodzeniem? Może problem tkwi w CLASSPATH, ale nie mam pojęcia, która wartość mogłaby być odpowiednia.
organizacja Kod:
$ 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
ścieżka importu zdefiniowany przez 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
Jestem pewien Jython podnosi ścieżek bo sprawdził, że z sys.path
w wierszu Jython.
BuildingType.java
package pendulum.generator;
public interface BuildingType {
public String getBuildingName();
public String getBuildingAddress();
public String getBuildingId();
}
spróbuj "z wahadła.generator import BuildingType " – sarwar
ImportError: nie można zaimportować nazwy BuildingType – Paolo
Czy plik jython.jar w jre/lib/ext? –