2011-01-21 42 views
5

有誰知道如何(或者如果)您可以使用ABCL編譯Lisp代碼到.class文件並創建一個主要方法,以便將整個東西打包成一個.jar文件並運行?ABCL編譯和原語

此外,有沒有人知道如何從ABCL代碼訪問原語Java類型?

回答

0

如果您正在尋找更多解決方案的包裝,ABCL可以從類加載器可以識別的URI加載ASDF定義。 ASDF-INSTALL由此機制加載(使用Ant構建目標'abcl.contrib'),但作爲一個簡單示例,以下代碼將動態加載a trivial test of ASDF loading via URI

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!" 

你可以研究罐子的包裝,但基本上它只是涉及到創建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實現可能會被修改。