From: Jacob F. <jac...@gm...> - 2009-02-26 15:51:12
|
I'm looking for the simplest possible tutorial for Jython for importing a Java class. One that's not in the standard JDK. |
From: Leo S. M. <leo...@gm...> - 2009-02-26 17:35:29
|
On Thu, Feb 26, 2009 at 12:51 PM, Jacob Fenwick <jac...@gm...> wrote: > I'm looking for the simplest possible tutorial for Jython for importing a > Java class. One that's not in the standard JDK. If it is on the CLASSPATH, it is the same as with classes bundled on the JDK. If it's not, you can add the jar file to the python path: >>> sys.path.append('/path/to/file.jar') And again, just import is as normal. -- Leo Soto M. http://blog.leosoto.com |
From: Jacob F. <jac...@gm...> - 2009-02-27 03:09:08
|
Hmm, it didn't work. Here's what I tried. I have a class in foo/Test.java: package foo; class Test { public String print() { return "Printing\n"; } } I compile it, then create a jar: jar -cvf classes.jar foo Then I run these commands in jython: >>> import sys >>> sys.path.append('/Users/jacob/projects/djython/jython_test/classes.jar') >>> from foo import Test >>> t = Test() >>> t.print() Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: 'foo.Test' object has no attribute 'print' >>> Hmmm. If I dir the t object I don't find a print function so I know it's not there. I feel like these steps I've followed should be working. If someone has a few minutes to look at it and tell me what I'm doing wrong I'd greatly appreciate it. Jacob On Thu, Feb 26, 2009 at 12:35 PM, Leo Soto M. <leo...@gm...> wrote: > On Thu, Feb 26, 2009 at 12:51 PM, Jacob Fenwick <jac...@gm...> > wrote: > > I'm looking for the simplest possible tutorial for Jython for importing a > > Java class. One that's not in the standard JDK. > > If it is on the CLASSPATH, it is the same as with classes bundled on > the JDK. If it's not, you can add the jar file to the python path: > > >>> sys.path.append('/path/to/file.jar') > > And again, just import is as normal. > > -- > Leo Soto M. > http://blog.leosoto.com > |
From: Andrea <mar...@go...> - 2009-02-27 20:22:20
|
Jacob Fenwick wrote: > Hmm, it didn't work. Here's what I tried. > > I have a class in foo/Test.java: > package foo; > > class Test { > public String print() { > return "Printing\n"; > } > } > > > I compile it, then create a jar: > jar -cvf classes.jar foo > > > Then I run these commands in jython: >>>> import sys >>>> sys.path.append('/Users/jacob/projects/djython/jython_test/classes.jar') >>>> from foo import Test >>>> t = Test() >>>> t.print() > Traceback (most recent call last): > File "<stdin>", line 1, in <module> > AttributeError: 'foo.Test' object has no attribute 'print' >>>> > > > Hmmm. If I dir the t object I don't find a print function so I know it's > not there. > > I feel like these steps I've followed should be working. If someone has > a few minutes to look at it and tell me what I'm doing wrong I'd greatly > appreciate it. > > Jacob Hi, I have an issue with the method via "sys.path.append()" when the package name starts with an already existing name. If you replace "package foo" -> "package org.foo" then it does not work. With something like "package newname.foo" then it is OK. It still works if one uses the CLASSPATH method. It seems that it only discovers "new" names and not existing one. (org already exists in >>> dir(org) ['GNOME', '__name__', 'ietf', 'jcp', 'omg', 'python', 'w3c', 'xml'] All that with jython 2.5b1 Andrea |
From: Andrea <mar...@go...> - 2009-02-28 11:30:52
|
Andrea wrote: > Hi, I have an issue with the method via "sys.path.append()" when the package name starts with an > already existing name. > > If you replace "package foo" -> "package org.foo" then it does not work. > With something like "package newname.foo" then it is OK. Ok, I forgot to give some detailed description of what I am doing. I have a class package org.foo; public class Test { public String print() { return "Printing"; } } then I create a jar file of it [andrea@thinkpad jython]$ jar -cvf andrea.jar org added manifest adding: org/(in = 0) (out= 0)(stored 0%) adding: org/foo/(in = 0) (out= 0)(stored 0%) adding: org/foo/Test.class(in = 277) (out= 212)(deflated 23%) and this is the jython script I try to run import sys sys.path.append('/home/andrea/foo/jython/andrea.jar') import org t=org.foo.Test() print t print t.print() It is very important now not to put the .py script in the root of the package folder. (I think the folder where the script is, is added to the class path, so that jython does not need to use the jar file to find the classes, and that would make the result misleading). The output is (deleting cachedir) each time [andrea@thinkpad jython2.5b1]$ ./jython /tmp/example.py *sys-package-mgr*: processing new jar, '/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre/lib/resources.jar' *sys-package-mgr*: processing new jar, '/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre/lib/rt.jar' *sys-package-mgr*: processing new jar, '/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre/lib/jsse.jar' *sys-package-mgr*: processing new jar, '/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre/lib/jce.jar' *sys-package-mgr*: processing new jar, '/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre/lib/charsets.jar' *sys-package-mgr*: processing new jar, '/home/andrea/projects/jython2.5b1/jython.jar' *sys-package-mgr*: processing new jar, '/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre/lib/ext/sunjce_provider.jar' *sys-package-mgr*: processing new jar, '/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre/lib/ext/sunpkcs11.jar' *sys-package-mgr*: processing new jar, '/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre/lib/ext/localedata.jar' *sys-package-mgr*: processing new jar, '/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre/lib/ext/dnsns.jar' *sys-package-mgr*: processing new jar, '/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre/lib/ext/gnome-java-bridge.jar' Traceback (most recent call last): File "/tmp/example.py", line 4, in <module> t=org.foo.Test() AttributeError: 'javapackage' object has no attribute 'foo' While, when I use a package name as newname.foo) I get [andrea@thinkpad jython2.5b1]$ ./jython /tmp/example.py *sys-package-mgr*: processing new jar, '/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre/lib/resources.jar' *sys-package-mgr*: processing new jar, '/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre/lib/rt.jar' *sys-package-mgr*: processing new jar, '/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre/lib/jsse.jar' *sys-package-mgr*: processing new jar, '/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre/lib/jce.jar' *sys-package-mgr*: processing new jar, '/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre/lib/charsets.jar' *sys-package-mgr*: processing new jar, '/home/andrea/projects/jython2.5b1/jython.jar' *sys-package-mgr*: processing new jar, '/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre/lib/ext/sunjce_provider.jar' *sys-package-mgr*: processing new jar, '/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre/lib/ext/sunpkcs11.jar' *sys-package-mgr*: processing new jar, '/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre/lib/ext/localedata.jar' *sys-package-mgr*: processing new jar, '/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre/lib/ext/dnsns.jar' *sys-package-mgr*: processing new jar, '/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre/lib/ext/gnome-java-bridge.jar' *sys-package-mgr*: processing new jar, '/home/andrea/foo/jython/andrea.jar' <<<<<<<<<<<<< newname.foo.Test@147e668 Printing And one can see that jython has actually loaded the jar file processing new jar, '/home/andrea/foo/jython/andrea.jar' I don't think this is too much of a problem, but it helps a lot to understand exactly how it works. (As you have realised I've just started to use jython). Thanks Andrea |
From: Frank W. <fwi...@gm...> - 2009-03-01 19:20:08
|
Hi Andrea, This is a known bug in Jython 2.5b1 which has been fixed on trunk, sorry I didn't recognize it when you first posted it. Details are here: http://bugs.jython.org/issue1239. I plan to get another beta out at the end of the coming week. -Frank |
From: Andrea <mar...@go...> - 2009-03-01 20:24:40
|
Frank Wierzbicki wrote: > Hi Andrea, > > This is a known bug in Jython 2.5b1 which has been fixed on trunk, > sorry I didn't recognize it when you first posted it. Details are > here: http://bugs.jython.org/issue1239. I plan to get another beta > out at the end of the coming week. > > -Frank Best news since I joined the mailing list! Look forward to a new beta. Since we are here, I'd like to ask your opinion on my other issue about Jython-JNI which I have posted on 24-02-09. Thanks Andrea |
From: Frank W. <fwi...@gm...> - 2009-02-27 12:49:20
|
On Thu, Feb 26, 2009 at 10:09 PM, Jacob Fenwick <jac...@gm...> wrote: > I have a class in foo/Test.java: > package foo; > > class Test { > public String print() { > return "Printing\n"; > } > } I think you'll just need to make the class Test public. -Frank |
From: Jacob F. <jac...@gm...> - 2009-02-27 13:59:02
|
How silly of me, thanks Frank. On Fri, Feb 27, 2009 at 7:49 AM, Frank Wierzbicki <fwi...@gm...>wrote: > On Thu, Feb 26, 2009 at 10:09 PM, Jacob Fenwick <jac...@gm...> > wrote: > > I have a class in foo/Test.java: > > package foo; > > > > class Test { > > public String print() { > > return "Printing\n"; > > } > > } > I think you'll just need to make the class Test public. > > -Frank > |
From: Andrea <mar...@go...> - 2009-03-01 18:55:26
|
Andrea wrote: > > import sys > sys.path.append('/home/andrea/foo/jython/andrea.jar') > import org > t=org.foo.Test() > print t > print t.print() > I've tried import org.foo.Test >>>> ImportError: No module named foo import org.foo >>>> ImportError: No module named foo from org.foo import Test >>>> ImportError: No module named foo But I've discovered that if I use a different name org->com it works. Originally I thought that the first part of the package had to be a new name, but now I have a different view If, at that point (with "org", after the above errors), I do "import xyz" I get >>> import xyz *sys-package-mgr*: processing new jar, '/home/andrea/foo/jython/andrea.jar') Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: No module named xyz And then all my classes have been imported! My best understanding is that some import don't trigger a rescan of all jar, while others do. Is anybody reading all that? |