On Tue, 19 Feb 2008, Bill Janssen wrote:

This may be a question for a JCC mailing list, but...

Good point, there is no JCC mailing list at the moment. JCC hasn't graduated yet on its own except as a source egg released on Cheeseshop [1]. If there is interest in using JCC outside of PyLucene, I'd certainly be open to separating it out for good and give it its own homepage and mailing list.
Until then, it's fine to use this list for JCC topics.

I've got a big Java library I'd like to wrap with JCC.  It's a small
jar file which depends on a huge poorly-engineered library of various
cruft from lots of sources.  Works fine if you just run "java" on it,
but when I try to run JCC on it, I get things like

Do you need to wrap the good stuff _and_ the cruft or can you get away with just wrapping the good stuff ? By default, JCC will wrap every public class/public method/public field it can find. If you have 28 Mb worth of cruft that's declared public, JCC is going to be generate a _LOT_ of code.
For comparison, for Lucene, JCC generates over 100,000 lines of C++.
This includes the pieces of the Java Runtime that are useful when using Lucene.

By default, JCC does a transitive closure on everything it finds that is public. You may end-up generating wrappers for stuff you don't need.

If you don't need to generate wrappers for code in Support.jar, then don't include it with --jar. Yes, you still need it on your classpath for the classes in GoodStuff.jar to load but that's a different issue.

% python -m jcc --jar GoodStuff.jar --jar Support.jar
Traceback (most recent call last):
 File "/usr/lib/python2.5/runpy.py", line 95, in run_module
   filename, loader, alter_sys)
 File "/usr/lib/python2.5/runpy.py", line 52, in _run_module_code
   mod_name, mod_fname, mod_loader)
 File "/usr/lib/python2.5/runpy.py", line 32, in _run_code
   exec code in run_globals
 File 
"/usr/lib/python2.5/site-packages/JCC-1.7-py2.5-linux-i686.egg/jcc/__init__.py", line 
28, in <module>
   cpp.jcc(sys.argv)
 File 
"/usr/lib/python2.5/site-packages/JCC-1.7-py2.5-linux-i686.egg/jcc/cpp.py", 
line 332, in jcc
   cls = env.findClass(className.replace('.', '/'))
jcc.cpp.JavaError: java.lang.VerifyError: (class: 
org/apache/html/dom/HTMLElementImpl, method: <init> signature: 
(Lorg/apache/html/dom/HTMLDocumentImpl;Ljava/lang/String;)V) Incompatible argument to 
function
%

Sure enough, Support.jar (a 28MB jar file containing all sorts of
libraries) does indeed include a version of
org.apache.html.dom.HTMLElementImpl, from some point in the past, but
it's not ever actually used by any of the code in GoodStuff.jar.

Can I turn off the verifier?  Only use it in certain cases?

I don't know what this error means.

Before feeding stuff to JCC, you should really carefully read the topic about all the command line args it can take in [2] if you haven't done so already. For example, the invocation you're using above is not going to generate any wrappers for use with Python, only the ones for use with C++.

Andi..

[1] http://pypi.python.org/pypi/JCC/1.7
[2] http://svn.osafoundation.org/pylucene/trunk/jcc/jcc/README
_______________________________________________
pylucene-dev mailing list
[email protected]
http://lists.osafoundation.org/mailman/listinfo/pylucene-dev

Reply via email to