From: Stefan B. <Ste...@tr...> - 2003-07-24 16:28:42
|
Well, sys.path supports jar files, that is true. However sys.path is used to search for *.py files not for *.class files. If it is a standalone jython application and you want to load classes outside of the startup class path, then yes, you have to create your own class loader. stefan -----Original Message----- From: Austine Jane [mailto:jan...@ho...] Sent: Thursday, July 24, 2003 11:38 AM To: jyt...@li... Subject: [Jython-users] RE: class loader bug? Thank you for your reply. >The first thing that bothers me is append('junit.jar') is not an actual > physical path. May be something like : > junit.jar was in the current directory. > append('c:\\junit-3.8.1\\junit.jar') or >append(r'c:\junit-3.8.1\junit.jar') > will do better. If you want to check how Jython search for jar files you >can It doesn't work either. > turn on the "python.verbose" property. Properties jyProp = new >Properties(); > jyProp.setProperty( > "python.cachedir", > System.getProperties().getProperty("user.home") + > "/.myjython/cachedir"); > jyProp.setProperty("python.verbose", > JythonPlugin.getResourceString("python.verbose")); > /* > * Normally, Jython can only provide access to public > members of classes. * However if this property is set to false and >you are > using Java 1.2 * then Jython can access non-public fields, methods, >and > constructors. */ > jyProp.setProperty( > "python.security.respectJavaAccessibility", > > >JythonPlugin.getResourceString("python.security.respectJavaAccessibility")) ; > Properties sysProp = (Properties) > System.getProperties().clone(); > PythonInterpreter.initialize(sysProp, jyProp, new > String[0]); > PythonInterpreter pi = new PythonInterpreter(null, new > PySystemState()); > Further, I was under impression that sys.path is only used to search for > python modules. The java class path is controlled with : As I understand from the docs, sys.path works for jar files as well. Doesn't it? Should I have to set CLASSPATH in accordance with it? > PySystemState.packageManager.addJar(r'c:\junit-3.8.1\junit.jar', true); > And again, addJar does not create an actual class loader. addJar only >helps > to parse the import statements. If you try to instantiate the class you >will > get ClassNotFoundException. So you have to specify your own class loader, > like this: PySsystemState state = new PySystemState(); > state.setClassLoader(TestCase.class.getClassLoader()); > PythonInterpreter pi = new PythonInterpreter(null, new PySystemState()); > This will do the trick. > Again this is all from the perspective of embedding Jython in Java code. > If you want to have a standalone jython application just put junit.jar >in > your class path. It's a kind of a standalone jython application. However, I'd like to load Java classes dynamically from jython(CLASSPATH is fixed at the point VM starts). Should I implement my own ClassLoader(such as URLClassLoader)? > hope it helps, Stefan > _________________________________________________________________ Add photos to your e-mail with MSN 8. Get 2 months FREE*. http://join.msn.com/?page=features/featuredemail ------------------------------------------------------- This SF.Net email sponsored by: Free pre-built ASP.NET sites including Data Reports, E-commerce, Portals, and Forums are available now. Download today and enter to win an XBOX or Visual Studio .NET. http://aspnet.click-url.com/go/psa00100003ave/direct;at.aspnet_072303_01/01 _______________________________________________ Jython-users mailing list Jyt...@li... https://lists.sourceforge.net/lists/listinfo/jython-users |