From: Carl K. <cmk...@gm...> - 2004-04-01 12:53:17
|
How to use jython -jar myfile.jar correctly? Invocation of a script can be done using a jar-package with a __run__.py as start script as the documenation says. However, how to import additional modules carried within the jar-file? As a test case I used Console.py from the swing demo. BTW: I worked with Windows NT, java-1.3.1-02 and jython-2.2a0. Console.py (with minor modifications) is renamed to __run__.py and the Action, Keymap and Styles modules and classfiles are part of the jar-file named 'jycon.jar'. At the beginning of __run__.py sys.argv[0] is appended to sys.path. sys.argv[0] is 'jycon.jar' or 'mypath/jycon-jar' depending of invocation with/out basepath of the jar-file. Invocation with "jython -jar jycon.jar" runs sucessfully! But what if jycon.jar isn't in the working folder? Obviously it is necessary that jycon.jar is appended with path information to sys.path, so I used sys.argv[0]. This works in some cases, but not in all cases. It seems that the pathnames must not contain backslashes and other literals. Is this a bug, or should I use another way of importing modules from inside the jar-file? Regards Carl Tests: ---------------------------------------------------------------------------- runs successfully with slash as path seperator: E:\JProgram\jy22>jython -jar cons2/jycon.jar syspath=['cons2', 'E:\\JProgram\\jy22\\.', 'E:\\JProgram\\jy22\\jythonlib.zip\\Lib', 'E:\\JProgram\\jy22', 'cons2/jycon.jar'] ---------------------------------------------------------------------------- fails with backslash as path seperator: E:\JProgram\jy22>jython -jar cons2\jycon.jar syspath=['cons2', 'E:\\JProgram\\jy22\\.', 'E:\\JProgram\\jy22\\jythonlib.zip\\Lib', 'E:\\JProgram\\jy22', 'cons2\\jycon.jar'] Exception in thread "main" Traceback (innermost last): File "__run__", line 175, in ? java.lang.ClassFormatError: org/python/proxies/cons2\jycon/jar$PythonThread$2 (Illegal Class name "org/python/proxies/cons2\jycon/jar$PythonThread$2") at java.lang.ClassLoader.defineClass0(Native Method) at java.lang.ClassLoader.defineClass(Unknown Source) at org.python.core.BytecodeLoader2.loadClassFromBytes(Unknown Source) at org.python.core.BytecodeLoader.makeClass(Unknown Source) at org.python.core.MakeProxies.makeClass(Unknown Source) at org.python.core.MakeProxies.makeProxy(Unknown Source) at org.python.core.PyClass.init(Unknown Source) at org.python.core.PyClass.<init>(Unknown Source) at org.python.core.Py.makeClass(Unknown Source) at org.python.core.Py.makeClass(Unknown Source) at org.python.pycode._pyx0.f$0(__run__:175) at org.python.pycode._pyx0.call_function(__run__) at org.python.core.PyTableCode.call(Unknown Source) at org.python.core.PyCode.call(Unknown Source) at org.python.core.Py.runCode(Unknown Source) at org.python.util.jython.runJar(Unknown Source) at org.python.util.jython.main(Unknown Source) java.lang.ClassFormatError: java.lang.ClassFormatError: org/python/proxies/cons2\jycon/jar$PythonThread$2 (Illegal Class name "org/python/proxies/cons2\jycon/jar$PythonThread$2") ---------------------------------------------------------------------------- fails with sign in path AND backslash or slash as a path seperator: E:\JProgram\jy22>jython -jar cons-2/jycon.jar syspath=['cons-2', 'E:\\JProgram\\jy22\\.', 'E:\\JProgram\\jy22\\jythonlib.zip\\Lib', 'E:\\JProgram\\jy22', 'cons-2/jycon.jar'] Exception in thread "main" Traceback (innermost last): File "__run__", line 175, in ? java.lang.ClassFormatError: org/python/proxies/cons-2/jycon/jar$PythonThread$2 (Illegal Class name "org/python/proxies/cons-2/jycon/jar$PythonThread$2") at java.lang.ClassLoader.defineClass0(Native Method) ....... java.lang.ClassFormatError: java.lang.ClassFormatError: org/python/proxies/cons-2/jycon/jar$PythonThread$2 (Illegal Class name "org/python/proxies/cons-2/jycon/jar$PythonThread$2") ---------------------------------------------------------------------------- E:\JProgram\jy22>jython -jar cons-2\jycon.jar syspath=['cons-2', 'E:\\JProgram\\jy22\\.', 'E:\\JProgram\\jy22\\jythonlib.zip\\Lib', 'E:\\JProgram\\jy22', 'cons-2\\jycon.jar'] Exception in thread "main" Traceback (innermost last): File "__run__", line 175, in ? java.lang.ClassFormatError: org/python/proxies/cons-2\jycon/jar$PythonThread$2 (Illegal Class name "org/python/proxies/cons-2\jycon/jar$PythonThread$2") at java.lang.ClassLoader.defineClass0(Native Method) ........ java.lang.ClassFormatError: java.lang.ClassFormatError: org/python/proxies/cons-2\jycon/jar$PythonThread$2 (Illegal Class name "org/python/proxies/cons-2\jycon/jar$PythonThread$2") ---------------------------------------------------------------------------- this is __run__.py:175: ======================= class PythonThread(Thread): -- +++ NEU bei GMX und erstmalig in Deutschland: TÜV-geprüfter Virenschutz +++ 100% Virenerkennung nach Wildlist. Infos: http://www.gmx.net/virenschutz |