From: Samuele P. <pe...@in...> - 2001-09-18 15:53:59
|
Hi. That's a java problem/design decision. Java -jar ignores the classpath and limits loading to the jar and the extension dirs. http://java.sun.com/j2se/1.3/docs/tooldocs/linux/java.html#options On the other hand you can use as a surrugate the Class-Path attribute in the manifest file: http://java.sun.com/j2se/1.3/docs/guide/jar/jar.html#Main Attributes regards, Samuele Pedroni. > From: Kevin McNamee <kev...@er...> > X-X-Sender: <qk...@lm...> > To: Jyt...@li... > MIME-version: 1.0 > Subject: [Jython-users] CLASSPATH problem > X-BeenThere: jyt...@li... > X-Mailman-Version: 2.0.5 > List-Help: <mailto:jyt...@li...?subject=help> > List-Post: <mailto:jyt...@li...> > List-Subscribe: <https://lists.sourceforge.net/lists/listinfo/jython-users>, <mailto:jyt...@li...?subject=subscribe> > List-Id: <jython-users.lists.sourceforge.net> > List-Unsubscribe: <https://lists.sourceforge.net/lists/listinfo/jython-users>, <mailto:jyt...@li...?subject=unsubscribe> > List-Archive: <https://lists.sourceforge.net/archives//jython-users/> > X-Original-Date: Tue, 18 Sep 2001 11:30:37 +0200 (MEST) > Date: Tue, 18 Sep 2001 11:30:37 +0200 (MEST) > X-Keywords: > > Hi, > > probably not a novel question, but how do I get my compiled script to look > in CLASSPATH. > > I do the following: > > # jythonc -a -j gui.jar Gui.py > > Then I try > > # setenv CLASSPATH /opt/ericsson/nms_cif_ist/lib/nms_cif_ist.jar > # java -jar gui.jar > > or > > # java -cp /opt/ericsson/nms_cif_ist/lib/nms_cif_ist.jar -jar gui.jar > > but neither work. > It works fine when I use the interpreter: > > # setenv CLASSPATH /opt/ericsson/nms_cif_ist/lib/nms_cif_ist.jar > # jython Gui.py > > What I am doing wrong? > > > Any help appreciated, > Kevin > > _________________________________________________ > Name/Title : Kevin McNamee, Software Consultant > Phone : +46 13 32 1165 > > > _______________________________________________ > Jython-users mailing list > Jyt...@li... > https://lists.sourceforge.net/lists/listinfo/jython-users |
From: Kevin M. <kev...@er...> - 2001-09-18 16:57:23
|
Hi, > That's a java problem/design decision. > > Java -jar ignores the classpath and limits loading > to the jar and the extension dirs. > > http://java.sun.com/j2se/1.3/docs/tooldocs/linux/java.html#options This webpage confirms that I can use '-cp' to set the classpath when running my app. # java -cp /opt/ericsson/nms_cif_pas/lib/nms_cif_pas.jar -jar myapp.jar But this doesn't work. Should I be setting the classpath compiler option in my .jython file also? This feels like something silly I've missed. Until now I have been trying to avoid having to learn about the Java environment, but there seems to be no helping it. Regards, Kevin. > > On the other hand you can use as a surrugate > the Class-Path attribute in the manifest file: > > http://java.sun.com/j2se/1.3/docs/guide/jar/jar.html#Main Attributes > > regards, Samuele Pedroni. > > > From: Kevin McNamee <kev...@er...> > > X-X-Sender: <qk...@lm...> > > To: Jyt...@li... > > MIME-version: 1.0 > > Subject: [Jython-users] CLASSPATH problem > > X-BeenThere: jyt...@li... > > X-Mailman-Version: 2.0.5 > > List-Help: <mailto:jyt...@li...?subject=help> > > List-Post: <mailto:jyt...@li...> > > List-Subscribe: <https://lists.sourceforge.net/lists/listinfo/jython-users>, > <mailto:jyt...@li...?subject=subscribe> > > List-Id: <jython-users.lists.sourceforge.net> > > List-Unsubscribe: <https://lists.sourceforge.net/lists/listinfo/jython-users>, > <mailto:jyt...@li...?subject=unsubscribe> > > List-Archive: <https://lists.sourceforge.net/archives//jython-users/> > > X-Original-Date: Tue, 18 Sep 2001 11:30:37 +0200 (MEST) > > Date: Tue, 18 Sep 2001 11:30:37 +0200 (MEST) > > X-Keywords: > > > > Hi, > > > > probably not a novel question, but how do I get my compiled script to look > > in CLASSPATH. > > > > I do the following: > > > > # jythonc -a -j gui.jar Gui.py > > > > Then I try > > > > # setenv CLASSPATH /opt/ericsson/nms_cif_ist/lib/nms_cif_ist.jar > > # java -jar gui.jar > > > > or > > > > # java -cp /opt/ericsson/nms_cif_ist/lib/nms_cif_ist.jar -jar gui.jar > > > > but neither work. > > It works fine when I use the interpreter: > > > > # setenv CLASSPATH /opt/ericsson/nms_cif_ist/lib/nms_cif_ist.jar > > # jython Gui.py > > > > What I am doing wrong? > > > > > > Any help appreciated, > > Kevin > > > > _________________________________________________ > > Name/Title : Kevin McNamee, Software Consultant > > Phone : +46 13 32 1165 > > > > > > _______________________________________________ > > Jython-users mailing list > > Jyt...@li... > > https://lists.sourceforge.net/lists/listinfo/jython-users > _________________________________________________ Name/Title : Kevin McNamee, Software Consultant Phone : +46 13 32 1165 |
From: Samuele P. <pe...@in...> - 2001-09-18 17:39:42
|
> > > That's a java problem/design decision. > > > > Java -jar ignores the classpath and limits loading > > to the jar and the extension dirs. > > > > http://java.sun.com/j2se/1.3/docs/tooldocs/linux/java.html#options > > This webpage confirms that I can use '-cp' to set the classpath when > running my app. You have missed the point. It is not a matter of what the page says about -cp but what it says about -jar: (from the vary seem page) -jar Execute a program encapsulated in a JAR file. The first argument is the name of a JAR file instead of a startup class name. In order for this option to work, the manifest of the JAR file must contain a line of the form Main-Class: classname. Here, classname identifies the class having the public static void main(String[] args) method that serves as your application's starting point. See the Jar tool reference page and the Jar trail of the Java Tutorial for information about working with Jar files and Jar-file manifests. When you use this option, the JAR file is the source of all user classes, and other user class ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ path settings are ignored. ^^^^^^^^^^^^^^^^^^^^^^^^^ Now you can reread my previous message. > > This feels like something silly I've missed. Until now I have been trying > to avoid having to learn about the Java environment, but there seems to be > no helping it. > Avoiding to learn about the Java env and using jython is a bad idea... regards, Samuele Pedroni. |
From: Kevin M. <kev...@er...> - 2001-09-19 12:52:45
|
Hi again, I have tried for several hours now to use the extension dirs, but they don't seem to work. A small example where test2.jar tries to import a test1.jar class: test1.py: --------- class gofaster(): def __init__(self): print "Zoom" faster() Compile: -------- # jythonc -a -p com.ericsson.test1 -j test1.jar test1.py Test: ----- # java -cp test1.jar com.ericsson.test1.test1 Zoom test2.py: --------- from com.ericsson.test1 import * test1.main([""]) # <--- C style??? Compile: -------- # jythonc -a -p com.ericsson.test2 -j test2.jar test2.py MyManifest.txt: -------------- Class-Path: test1.jar Update Jar file: ---------------- # jar -umf MyManifest test2.jar Test: ----- # java -jar test2.jar Java Traceback: at org.python.core.Py.ImportError(Py.java:180) at org.python.core.imp.dottedFind(imp.java:414) at org.python.core.imp.importName(imp.java:436) at org.python.core.imp.importName(imp.java:509) at org.python.core.ImportFunction.load(__builtin__.java:967) at org.python.core.ImportFunction.__call__(__builtin__.java:961) at org.python.core.PyObject.__call__(PyObject.java:250) at org.python.core.__builtin__.__import__(__builtin__.java:921) at org.python.core.imp.importOne(imp.java:518) at com.ericsson.test1.test1$_PyInner.main$1(test1.java:36) at com.ericsson.test1.test1$_PyInner.call_function(test1.java:28) at org.python.core.PyTableCode.call(PyTableCode.java:155) at org.python.core.imp.createFromCode(imp.java:157) at org.python.core.Py.runMain(Py.java:798) at com.ericsson.test1.test1.main(test1.java:51) Traceback (innermost last): File "/home/qkename/jwork/extdirstest/test1.py", line 0, in main ImportError: No module named ericsson Environment: ------------ Everything is done in one directory. CLASSPATH is not set to anything. Using Jython 2.0 on java1.3.1 (JIT: null). Much appreciated, Kevin. On Tue, 18 Sep 2001, Samuele Pedroni wrote: > > > > > > That's a java problem/design decision. > > > > > > Java -jar ignores the classpath and limits loading > > > to the jar and the extension dirs. > > > > > > http://java.sun.com/j2se/1.3/docs/tooldocs/linux/java.html#options > > > > This webpage confirms that I can use '-cp' to set the classpath when > > running my app. > You have missed the point. It is not a matter of what the page says > about -cp but what it says about -jar: (from the vary seem page) > > > -jar > Execute a program encapsulated in a JAR file. The first argument is the name of a JAR file > instead of a startup class name. In order for this option to work, the manifest of the JAR file > must contain a line of the form Main-Class: classname. Here, classname identifies the class > having the public static void main(String[] args) method that serves as your application's > starting point. See the Jar tool reference page and the Jar trail of the Java Tutorial for > information about working with Jar files and Jar-file manifests. > > When you use this option, the JAR file is the source of all user classes, and other user class > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ > path settings are ignored. > ^^^^^^^^^^^^^^^^^^^^^^^^^ > > Now you can reread my previous message. > > > > > This feels like something silly I've missed. Until now I have been trying > > to avoid having to learn about the Java environment, but there seems to be > > no helping it. > > > Avoiding to learn about the Java env and using jython is a bad > idea... > > regards, Samuele Pedroni. > _________________________________________________ Name/Title : Kevin McNamee, Software Consultant Phone : +46 13 32 1165 |
From: Samuele P. <pe...@in...> - 2001-09-19 15:38:09
|
Now, the sad part about jython; jython ignores the Class-Path in the manifest. You can either use: import sys sys.add_package("your.java.package") or try out the experimental patch at: http://sourceforge.net/tracker/index.php?func=detail&aid=454329&group_id=12867& atid=312867 in order to index your jars. For reference see the thread http://aspn.activestate.com/ASPN/Mail/Message/Jython-dev/754080 and http://aspn.activestate.com/ASPN/Mail/Message/Jython-dev/754170 Please, ignore the part about RunJar, it will not be supported in that form. regards. |
From: Samuele P. <pe...@in...> - 2001-09-19 18:03:15
|
Hi [kevin.mcnamee] > test2.py: > --------- > from com.ericsson.test1 import * > test1.main([""]) # <--- C style??? test1 has no main function defined, OTOH the top level statements of a module are executed on importing so no need for that. from.com.ericsson.test1 import * import * from a java package should not be used in production code, in particular its support through jythonc is quite fragile, and does not work with the 1st workaround proposed in the previous message , I don't rembember for the patch ... so a possible test2 is: import sys sys.add_package("com.ericcson.test1") from com.ericsson.test1 import test1 # ^ executes the top-level stmts in test1.py regards. |
From: Kevin M. <kev...@er...> - 2001-09-20 08:00:44
|
Hi, thanks for the input. However, ... test1.py: --------- class gofaster: def __init__(self): print "Zoom" gofaster() Compile: -------- # jythonc -a -p com.ericsson.test1 -j test1.jar test1.py Test: ----- # java -cp test1.jar com.ericsson.test1.test1 Zoom test2.py: --------- import sys sys.add_package("com.ericcson.test1") from com.ericsson.test1 import test1 Compile: -------- # jythonc -a -p com.ericsson.test2 -j test2.jar test2.py MyManifest.txt: -------------- Class-Path: test1.jar Update Jar file: ---------------- # jar -umf MyManifest test2.jar Test: ----- # java -jar test2.jar Java Traceback: at org.python.core.Py.ImportError(Py.java:180) at org.python.core.imp.dottedFind(imp.java:414) at org.python.core.imp.importName(imp.java:436) at org.python.core.imp.importName(imp.java:509) at org.python.core.ImportFunction.load(__builtin__.java:967) at org.python.core.ImportFunction.__call__(__builtin__.java:961) at org.python.core.PyObject.__call__(PyObject.java:250) at org.python.core.__builtin__.__import__(__builtin__.java:921) at org.python.core.imp.importOne(imp.java:518) at com.ericsson.test1.test1$_PyInner.main$1(test1.java:36) at com.ericsson.test1.test1$_PyInner.call_function(test1.java:28) at org.python.core.PyTableCode.call(PyTableCode.java:155) at org.python.core.imp.createFromCode(imp.java:157) at org.python.core.Py.runMain(Py.java:798) at com.ericsson.test1.test1.main(test1.java:54) Traceback (innermost last): File "/home/qkename/jwork/extdirstest/test2.py", line 0, in main ImportError: No module named ericsson Result: ------- The sys.add_package() workaround doesn't work. I wonder how this should work since if as you say, Jython doesn't read the Class-Path field, then it won't be able to find the jar file in the first place. As for the patch. How should this be applied? I did not see any instructions on the webpage about how to do this. Does the workaround above have to be used together with the patch? Much appreciated, Kevin > Hi > > [kevin.mcnamee] > > test2.py: > > --------- > > from com.ericsson.test1 import * > > test1.main([""]) # <--- C style??? > > test1 has no main function defined, OTOH > the top level statements of a module are executed on importing > so no need for that. > > from.com.ericsson.test1 import * > > import * from a java package should not be used in production code, > in particular its support through jythonc is quite fragile, > and does not work with the 1st workaround proposed in the previous > message , I don't rembember for the patch ... > > so a possible test2 is: > > import sys > sys.add_package("com.ericcson.test1") > from com.ericsson.test1 import test1 > # ^ executes the top-level stmts in test1.py > > regards. > > > > > _________________________________________________ Name/Title : Kevin McNamee, Software Consultant Phone : +46 13 32 1165 |
From: Humbel O. <Otm...@bi...> - 2001-09-20 12:37:47
|
Hello Kevin, maybe this could be a typo. You had in test2.py: sys.add_package("com.ericcson.test1") instead of IMHO: sys.add_package("com.ericsson.test1") if I look at the import=20 from com.ericsson.test1 import test1 greetings Oti. [ Kevin McNamee ] > test2.py: > --------- > import sys > sys.add_package("com.ericcson.test1") > from com.ericsson.test1 import test1 >=20 [snip] > ImportError: No module named ericsson |
From: Kevin M. <kev...@er...> - 2001-09-20 13:15:29
|
On Thu, 20 Sep 2001, Humbel Otmar wrote: > maybe this could be a typo. You had in test2.py: > sys.add_package("com.ericcson.test1") Doh! I am going blind with the permutations. Now I get a _little_ further. test1.py: --------- class gofaster: def __init__(self): print "Zoom" gofaster() Compile: -------- # jythonc -a -p com.ericsson.test1 -j test1.jar test1.py test2.py: --------- import sys sys.add_package("com.ericsson.test1") import com.ericsson.test1 print "dir(com.ericsson.test1):", dir(com.ericsson.test1) com.ericsson.test1.test1.main([""]) Compile: -------- # jythonc -a -p com.ericsson.test2 -j test2.jar test2.py Test: ----- # java -jar test2.jar dir(com.ericsson.test1): ['__name__'] Java Traceback: at org.python.core.Py.AttributeError(Py.java:90) at org.python.core.PyObject.__getattr__(PyObject.java:672) at com.ericsson.test2.test2$_PyInner.main$1(test2.java:47) at com.ericsson.test2.test2$_PyInner.call_function(test2.java:34) at org.python.core.PyTableCode.call(PyTableCode.java:155) at org.python.core.imp.createFromCode(imp.java:157) at org.python.core.Py.runMain(Py.java:798) at com.ericsson.test2.test2.main(test2.java:61) Traceback (innermost last): File "/home/qkename/jwork/extdirstest/test2.py", line 0, in main AttributeError: java package 'com.ericsson.test1' has no attribute 'test1' Result: ------- I have stopped adding the Class-Path field to the manifest, since Samuel said that it ignores this and I can confirm it is so. I wonder if calling the add_package procedure is simply allowing the import statement to succeed without providing any real connection to another jar file. test1.jar might as well not exist. Relentlessly, Kevin _________________________________________________ Name/Title : Kevin McNamee, Software Consultant Phone : +46 13 32 1165 |
From: Samuele P. <pe...@in...> - 2001-09-20 15:06:25
|
> Result: > ------- > I have stopped adding the Class-Path field to the manifest, since Samuel > said that it ignores this and I can confirm it is so. > It's tricky. I said that Jython ignores not Java. So the sys.add_package makes Jython aware of the package, but Jython uses Java to import the class so Java should know the jar, you need both the sys.add_package and the Class-Path in the manifest, if then it's still not working is just a matter of getting Class-Path right ;) regards, Samuele Pedroni. |
From: Humbel O. <Otm...@bi...> - 2001-09-20 13:33:32
|
[ Kevin McNamee ] [snip] > test2.py: > --------- > import sys > sys.add_package("com.ericsson.test1") > import com.ericsson.test1 > AttributeError: java package 'com.ericsson.test1' has no=20 > attribute 'test1' > I wonder if calling the add_package procedure is simply allowing the > import statement to succeed without providing any real connection to > another jar file. test1.jar might as well not exist. This is just a guess (I'm not an expert). Maybe try, in test2.py: sys.add_package("com.ericsson.test1") from com.ericsson.test1 import test1 instead of: sys.add_package("com.ericsson.test1") import com.ericsson.test1 The first is my absolute favourite style of importing, and I almost ever am successful with it. Good luck ! Oti. |
From: Kevin M. <kev...@er...> - 2001-09-20 13:47:29
|
Hi, On Thu, 20 Sep 2001, Humbel Otmar wrote: > > This is just a guess (I'm not an expert). Maybe try, in test2.py: > sys.add_package("com.ericsson.test1") > from com.ericsson.test1 import test1 > instead of: > sys.add_package("com.ericsson.test1") > import com.ericsson.test1 > > The first is my absolute favourite style of importing, and I almost ever > am successful with it. Yes, in general I also use this method. However, in this case it did not have any effect on the problem. test2.py: --------- import sys sys.add_package("com.ericsson.test1") from com.ericsson.test1 import test1 test1.main([""]) Regards, Kevin _________________________________________________ Name/Title : Kevin McNamee, Software Consultant Phone : +46 13 32 1165 |
From: Kevin M. <kev...@er...> - 2001-09-21 06:40:24
|
Success! I was being a little hasty when I tested and had a typo in the Class-Path. I have so quickly gotten used to be being able to just do something in Jython and having it work right away that this bug just threw me. Thanks for your time and patience. Best regards, Kevin. On Thu, 20 Sep 2001, Samuele Pedroni wrote: > > Result: > > ------- > > I have stopped adding the Class-Path field to the manifest, since Samuel > > said that it ignores this and I can confirm it is so. > > > It's tricky. I said that Jython ignores not Java. > So the sys.add_package makes Jython aware of the package, > but Jython uses Java to import the class > so Java should know the jar, > you need both the sys.add_package and the Class-Path in > the manifest, if then it's still not working > is just a matter of getting Class-Path right ;) > > regards, Samuele Pedroni. > _________________________________________________ Name/Title : Kevin McNamee, Software Consultant Phone : +46 13 32 1165 |