On Mar 10, 2011, at 11:23, "Anton Korosov" <[email protected]> wrote:
> Thank you very much, Andi, for the prompt reply!
> Can I torture you with questions a bit more?
>
> Now I tried to build it the following way:
> python -m jcc.__init__ \
> --python testjava \
> --build \
> --install \
> --jar /host/local/beam-4.8/modules/beam-core-4.8.2.jar \
> --classpath /host/local/beam-4.8/lib/clibwrapper-jiio-1.2-20090918.jar \
> --classpath /host/local/beam-4.8/lib/commons-beanutils-1.7.0.jar \
> ... + 100 more JARs in classpath.
>
> and it worked perfectly! CPP and Py code was generated, built, and
> installed. I even managed to
> import testjava
> However, when I do
> testjava.initVM(testjava.CLASSPATH)
> it gives error that looks familiar:
The jars you list with --classpath must also be on the classpath at runtime.
Either put them on the CLASSPATH env var or list them in your initVM() call's
classpath argument.
Andi..
> ---------------------------------------------------------------------------
> JavaError Traceback (most recent call last)
>
> /home/antonk/<ipython console> in <module>()
>
> JavaError: java.lang.NoClassDefFoundError: javax/media/jai/OpImage
> Java stacktrace:
> java.lang.NoClassDefFoundError: javax/media/jai/OpImage
> Caused by: java.lang.ClassNotFoundException: javax.media.jai.OpImage
> at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
> at java.security.AccessController.doPrivileged(Native Method)
> at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
> at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
> at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
> at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
>
> Does that simply mean that I should find a JAR that contains
> javax/media/jai/OpImage and include it as --jar while building?
>
> When I try that
> --jar /host/local/beam-4.8/lib/jai_core-1.1.3.jar \
> and add more required classpathes required by jai
> --classpath /host/local/beam-4.8/jre/lib/alt-rt.jar \
> --classpath /host/local/beam-4.8/jre/lib/charsets.jar \
> --classpath /host/local/beam-4.8/jre/lib/deploy.jar \
> --classpath /host/local/beam-4.8/jre/lib/jce.jar \
> --classpath /host/local/beam-4.8/jre/lib/jsse.jar \
> --classpath /host/local/beam-4.8/jre/lib/management-agent.jar \
> --classpath /host/local/beam-4.8/jre/lib/plugin.jar \
> --classpath /host/local/beam-4.8/jre/lib/resources.jar \
> --classpath /host/local/beam-4.8/jre/lib/rt.jar \
>
> it again gives error while generating the code by JCC:
> While loading com/sun/media/jai/tilecodec/JPEGTileEncoder
> Traceback (most recent call last):
> File "/usr/lib/python2.6/runpy.py", line 122, in _run_module_as_main
> "__main__", fname, loader, pkg_name)
> File "/usr/lib/python2.6/runpy.py", line 34, in _run_code
> exec code in run_globals
> File
> "/usr/local/lib/python2.6/dist-packages/JCC-2.7-py2.6-linux-x86_64.egg/jcc/__init__.py",
> line 32, in <module>
> import jcc.__main__
> File
> "/usr/local/lib/python2.6/dist-packages/JCC-2.7-py2.6-linux-x86_64.egg/jcc/__main__.py",
> line 98, in <module>
> cpp.jcc(sys.argv)
> File
> "/usr/local/lib/python2.6/dist-packages/JCC-2.7-py2.6-linux-x86_64.egg/jcc/cpp.py",
> line 501, in jcc
> cls = findClass(className.replace('.', '/'), iii)
> File
> "/usr/local/lib/python2.6/dist-packages/JCC-2.7-py2.6-linux-x86_64.egg/jcc/cpp.py",
> line 73, in findClass
> cls = _findClass(className)
> jcc.cpp.JavaError: java.lang.IncompatibleClassChangeError: Implementing class
> Java stacktrace:
> java.lang.IncompatibleClassChangeError: Implementing class
> at java.lang.ClassLoader.defineClass1(Native Method)
> at java.lang.ClassLoader.defineClass(ClassLoader.java:634)
> at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
> at java.net.URLClassLoader.defineClass(URLClassLoader.java:277)
> at java.net.URLClassLoader.access$000(URLClassLoader.java:73)
> at java.net.URLClassLoader$1.run(URLClassLoader.java:212)
> at java.security.AccessController.doPrivileged(Native Method)
> at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
> at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
> at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
> at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
>
> But here I'm stuck. What means java.lang.IncompatibleClassChangeError? How
> should I cope with that problem now? Can you please suggest something?
>
> All the best!
> Anton
>
> ps. It's quite useful to write you: I try 3-5 solutions while just
> describing the problem ;)
> pps. JCC is absolutely fantastic! What I luck is a bit of experience in
> Java :(
>
>>
>> On Wed, 9 Mar 2011, Anton Korosov wrote:
>>
>>> I'm trying to use BEAM/Visat software in Python. It is a large project
>>> with > 100 JARs. I try to 'convert' these JARs into Python specifying
>>> each
>>> after --jar option:
>>> python -m jcc.__init__ \
>>> --python testbeam \
>>> --jar /host/local/beam-4.8/modules/beam-landsat-reader-1.2.1.jar \
>>> --jar /host/local/beam-4.8/modules/beam-meris-boreal-lakes-1.4.2.jar \
>>> --jar /host/local/beam-4.8/modules/beam-meris-case2-core-1.4.2.jar \
>>> --jar /host/local/beam-4.8/modules/beam-meris-case2-regional-1.4.2.jar \
>>> --jar /host/local/beam-4.8/modules/beam-meris-cloud-1.5.203.jar \
>>> --jar /host/local/beam-4.8/modules/beam-meris-eutrophic-lakes-1.4.2.jar
>>> \
>>> --jar /host/local/beam-4.8/modules/beam-merisl3-reader-1.1.jar \
>>> ...
>>
>> If any of these jar files depend on other jar files not listed with --jar,
>> such as lucene's (as you hint below with QueryParser not being found) then
>> you must list lucene's jar on --classpath or ensure it's on the CLASSPATH
>> env var.
>>
>> Also, you only need to list --jar files whose public classes you want to
>> make accessible from Python. Dependencies can be listed with --classpath
>> or
>> --include.
>> See output of 'python -m jcc.__main__' for details about JCC's command
>> line
>> flags.
>>
>> Andi..
>>
>>>
>>> However I immediately got error:
>>> While loading com/jidesoft/lucene/c$1
>>> Traceback (most recent call last):
>>> File "/usr/lib/python2.6/runpy.py", line 122, in _run_module_as_main
>>> "__main__", fname, loader, pkg_name)
>>> File "/usr/lib/python2.6/runpy.py", line 34, in _run_code
>>> exec code in run_globals
>>> File
>>> "/usr/local/lib/python2.6/dist-packages/JCC-2.7-py2.6-linux-x86_64.egg/jcc/__init__.py",
>>> line 32, in <module>
>>> import jcc.__main__
>>> File
>>> "/usr/local/lib/python2.6/dist-packages/JCC-2.7-py2.6-linux-x86_64.egg/jcc/__main__.py",
>>> line 98, in <module>
>>> cpp.jcc(sys.argv)
>>> File
>>> "/usr/local/lib/python2.6/dist-packages/JCC-2.7-py2.6-linux-x86_64.egg/jcc/cpp.py",
>>> line 501, in jcc
>>> cls = findClass(className.replace('.', '/'), iii)
>>> File
>>> "/usr/local/lib/python2.6/dist-packages/JCC-2.7-py2.6-linux-x86_64.egg/jcc/cpp.py",
>>> line 73, in findClass
>>> cls = _findClass(className)
>>> jcc.cpp.JavaError: java.lang.NoClassDefFoundError:
>>> org/apache/lucene/queryParser/QueryParser
>>> Java stacktrace:
>>> java.lang.NoClassDefFoundError:
>>> org/apache/lucene/queryParser/QueryParser
>>> at java.lang.ClassLoader.defineClass1(Native Method)
>>> at java.lang.ClassLoader.defineClass(ClassLoader.java:634)
>>> at
>>> java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
>>> at java.net.URLClassLoader.defineClass(URLClassLoader.java:277)
>>> at java.net.URLClassLoader.access$000(URLClassLoader.java:73)
>>> at java.net.URLClassLoader$1.run(URLClassLoader.java:212)
>>> at java.security.AccessController.doPrivileged(Native Method)
>>> at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
>>> at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
>>> at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
>>> at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
>>> Caused by: java.lang.ClassNotFoundException:
>>> org.apache.lucene.queryParser.QueryParser
>>> at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
>>> at java.security.AccessController.doPrivileged(Native Method)
>>> at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
>>> at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
>>> at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
>>> at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
>>> ... 11 more
>>>
>>> Why is that? Does that mean that the class com/jidesoft/lucene/c$1 has
>>> reference to a class org/apache/lucene/queryParser/QueryParser but the
>>> latter is not given in any JAR?
>>>
>>> How can such situation occur if Beam/Visat works perfectly? Could it be
>>> that Beam/Visat simply don't call
>>> org/apache/lucene/queryParser/QueryParser ?
>>>
>>> What should I do? Download a JAR with
>>> org/apache/lucene/queryParser/QueryParser or rather --exclude
>>> com/jidesoft/lucene/c ? Will it influence performance of the Python
>>> module?
>>>
>>> Thank you very much for any ideas/suggestions!
>>> Anton
>>>
>>
>>
>