2011-01-21 2 views
5

Кто-нибудь знает, как (или если) вы можете использовать ABCL для компиляции кода Lisp в файлы .class и создать основной метод, чтобы все это можно было упаковать в файл .jar и запустить?Сбор и примитивы ABCL

Также, кто-нибудь знает, как получить доступ к примитивам Java-типов из кода ABCL?

ответ

0

Если вы ищете дополнительную упаковку вокруг решения, ABCL может загружать определения ASDF из URI, которые понимает загрузчик классов. ASDF-INSTALL загружается этим механизмом (используйте Ant build target '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. Любые файлы классов Java в JAR в настоящее время игнорируются. Хотя файлы классов Java должны быть «независимыми от платформы», существует достаточно реализаций JVM (qv. Java 5 v Java 6), что имеет смысл скомпилировать Lisp для реализации ABCL. Конечно, есть возможность загружать ABCL FASL через URI, так что текущая реализация ASDF, вероятно, может быть изменена, если у кого-то есть прецедент для никогда не компилирования при начальной загрузке ASDF.

Смежные вопросы