2013-02-14 2 views
13

참고 : 해결책을 찾았으며 스스로 답했습니다. 하지만, 그 설정이 왜 잘못되어서 문제가 발생했는지 나는 알지 못합니다. 자이 썬 임포트 시스템이 어떻게 작동하는지에 대한 좋은 설명이 필요하다. 현상금을 얻는 사람이 있다면 그 대답을 부탁드립니다.자이 썬 모듈에서 Java 클래스를 가져올 수 없습니다.


저는 파이썬으로 계산할 필요가있는 기존 Java EE 프로젝트에서 작업하고 있습니다. 저는 통합 테스트의 첫 단계에 있지만 이미 문제에 직면하고 있습니다. 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 인터페이스를 가져 가지 수정합니까? 어쩌면 CLASSPATH에 문제가 있을지 모르지만 어느 값이 적절한 지 알 수 없습니다.


코드 조직하십시오 private Jython registry file에 의해 정의

$ 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 

가져 오기 경로 :

$ 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 

내가 sys.path에 있음을 확인하기 때문에 자이 썬은 경로를 집어 확신 자이 썬 프롬프트.

BuildingType.java는

package pendulum.generator; 

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

try "from pendulum.생성기 가져 오기 BuildingType " – sarwar

+0

ImportError : 이름을 가져올 수 없습니다. BuildingType – Paolo

+1

jre/lib/ext에 jython.jar이 있습니까? –

답변

4

try/catch 방식으로 많은 시간을 낭비하고 나면 대답을 직접 찾을 수있었습니다.

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 

하지 않음이 : .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 

, 수입 경로에 /path/to/project/build/classes을 추가하는 것은 잘못이다가 반영하더라도 (파일 시스템 계층 구조), 이 맞고 문제가 해결되었습니다.

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 (자이 썬 책).

+0

큰 감사입니다. 클래스 패스를 설정하지 않고 커맨드 라인 ('java.lang.ClassNotFoundException')에서 클래스를 사용할 수 없었습니다. 이클립스에서 모든 괜찮 았는데, 그래도. – Paolo