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
>