5

ABCL を使用して Lisp コードを .class ファイルにコンパイルし、main メソッドを作成してすべてを .jar ファイルにパッケージ化して実行できるようにする方法 (または場合) を知っている人はいますか?

また、ABCL コードからプリミティブ Java 型にアクセスする方法を知っている人はいますか?

4

2 に答える 2

2

先日、Didier Verner がまさにそのようなパッケージングに関する質問の経験を投稿しました。

于 2011-01-26T10:18:13.957 に答える
0

ソリューションをさらにパッケージ化する必要がある場合、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には、ASDF2実装を介してOUTPUT-TRANSLATION-LOCATIONメカニズムを介してローカルディレクトリに自動的にコンパイルされるLispソースのみが含まれていることに注意してください。現在、JAR 内の Java クラス ファイルはすべて無視されます。Java クラス ファイルは「プラットフォームに依存しない」べきですが、ABCL 実装ごとに Lisp をコンパイルするのに十分な JVM 実装 (qv. Java 5 v Java 6) があります。確かに、URI を介して ABCL FASL をロードする機能もあるため、最初の ASDF ロードでコンパイルしないというユースケースがある場合、現在の ASDF 実装はおそらく変更される可能性があります。

于 2011-01-26T10:41:38.480 に答える