You are viewing a plain text version of this content. The canonical link for it is here.
Posted to pylucene-dev@lucene.apache.org by Anton Korosov <an...@nersc.no> on 2011/03/09 17:15:12 UTC
real reason for java.lang.NoClassDefFoundError ?
Hello!
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 \
...
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
Re: real reason for java.lang.NoClassDefFoundError ?
Posted by Andi Vajda <va...@apache.org>.
On Mar 10, 2011, at 11:23, "Anton Korosov" <an...@nersc.no> 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
>>>
>>
>>
>
Re: real reason for java.lang.NoClassDefFoundError ?
Posted by Anton Korosov <an...@nersc.no>.
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:
---------------------------------------------------------------------------
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
>>
>
>
Re: real reason for java.lang.NoClassDefFoundError ?
Posted by Andi Vajda <va...@apache.org>.
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
>