On Sun, Aug 22, 2010 at 1:15 AM, David Dreisigmeyer david.dreisigmeyer@gmail.com wrote:
Hi Robert,
I did see that (thanks for the link). This example is included with the source code for abcl also (in examples/lisp-to-java). I guess what I'd need help with is how to to make a jar file from the Main.java from examples/lisp-to-java (see below) file and then use that from abcl.
Thanks again, I really appreciate it,
-Dave
import org.armedbear.lisp.*;
public class Main { /** * This example creates an Interpreter instance, loads our * lisp code from a file and then looks up a function defined * in the loaded lisp file and executes the function. * * The function takes a single parameter and invokes a java method * on the object provided. We provide our Main object as the parameter. * */ public static void main(String[] argv) { try { Main thisObject = new Main(); Interpreter interpreter = Interpreter.createInstance(); interpreter.eval("(load "lispfunctions.lisp")"); // the function is not in a separate package, thus the // correct package is CL-USER. Symbol names are // upper case. Package needs the prefix, because java // also has a class named Package. org.armedbear.lisp.Package defaultPackage = Packages.findPackage("CL-USER"); Symbol voidsym = defaultPackage.findAccessibleSymbol("VOID-FUNCTION"); Function voidFunction = (Function) voidsym.getSymbolFunction(); voidFunction.execute(new JavaObject(thisObject)); } catch (Throwable t) { System.out.println("exception!"); t.printStackTrace(); } } public int addTwoNumbers(int a, int b) { return a + b; } }
That's independent from ABCL; it's the same as for any Java library. You need to compile the java file(s) with javac, with the libraries you need (ABCL included) on the classpath, then if you want a jar, run the jar program on the generated .class files; it has a command like syntax inspired by tar. In your case, that means something like
javac -cp .:/path/to/abcl.jar your-java-files jar cvf foo.jar .
assuming you're in a Unix-like environment and . is the source code root of your project.
For more complex scenarios - projects consisting of many files and depending on many libraries - you'll be better off using an IDE like Eclipse or a build tool like Ant.
To use your jar with ABCL, include it in the classpath:
java -cp /path/to/abcl.jar:/path/to/your.jar org.armedbear.lisp.Main
hth, Alessio Stalla