有谁知道如何(或是否)可以使用 ABCL 将 Lisp 代码编译为 .class 文件并创建一个 main 方法,以便将整个东西打包成一个 .jar 文件并运行?
另外,有谁知道如何从 ABCL 代码访问原始 Java 类型?
有谁知道如何(或是否)可以使用 ABCL 将 Lisp 代码编译为 .class 文件并创建一个 main 方法,以便将整个东西打包成一个 .jar 文件并运行?
另外,有谁知道如何从 ABCL 代码访问原始 Java 类型?
前几天, Didier Verner就这样一个包装问题发表了他的经历。
如果您正在寻找围绕解决方案的更多包装,ABCL 能够从类加载器理解的 URI 加载 ASDF 定义。ASDF-INSTALL 由这种机制加载(使用 Ant 构建目标'abcl.contrib'),但作为一个简单示例,以下代码将通过 URI 动态加载 ASDF 加载的简单测试。
CL-USER> (pushnew #p"jar:http://abcl-dynamic-install.googlecode.com/files/asdf-uri-test.jar!/asdf-uri-test/" asdf:*central-registry*)
(#P"jar:http://abcl-dynamic-install.googlecode.com/files/asdf-uri-test.jar!/asdf-uri-test/" #P"jar:file:/Users/evenson/work/abcl/dist/abcl-contrib.jar!/asdf-install/" (MERGE-PATHNAMES ".asdf-install-dir/systems/" (USER-HOMEDIR-PATHNAME)) (MERGE-PATHNAMES "work/lsw/" (USER-HOMEDIR-PATHNAME)))
CL-USER> (asdf:load-system :test)
; Loading system definition from jar:http://abcl-dynamic-install.googlecode.com/files/asdf-uri-test.jar!/asdf-uri-test/test.asd into #<PACKAGE "ASDF0">
; Registering #<SYSTEM :TEST> as TEST
; Compiling jar:http://abcl-dynamic-install.googlecode.com/files/asdf-uri-test.jar!/asdf-uri-test/test.lisp ...
; (DEFUN TEST ...)
; Wrote /Users/evenson/.cache/common-lisp/abcl-0.25.0-dev-fasl37-macosx-java/files/asdf-uri-test.jar/asdf-uri-test/ASDF-TMP-test.abcl (0.163 seconds)
T
CL-USER> (test)
"The test function loaded!"
您可以研究用于打包的 jar,但基本上它只涉及创建一个 ASDF 定义,然后简单地将其打包为 JAR。请注意,JAR 仅包含 Lisp 源代码,该源代码通过 ASDF2 实现通过 OUTPUT-TRANSLATION-LOCATION 机制自动编译到本地目录。JAR 中的任何 Java 类文件当前都被忽略。尽管 Java 类文件应该是“平台无关的”,但那里有足够的 JVM 实现(qv. Java 5 v Java 6),因此根据 ABCL 实现编译 Lisp 是有意义的。当然也可以通过 URI 加载 ABCL FASL,因此如果有人有一个从不编译初始 ASDF 加载的用例,则可能会修改当前的 ASDF 实现。