1 | ABCL-ASDF |
---|
2 | ========= |
---|
3 | |
---|
4 | To use: |
---|
5 | |
---|
6 | CL-USER> (require :abcl-contrib) |
---|
7 | |
---|
8 | CL-USER> (require :abcl-asdf) |
---|
9 | |
---|
10 | |
---|
11 | ABCL-ASDF contains ABCL specific contributions to ASDF system |
---|
12 | definition mainly concerned with finding JVM artifacts such as jar |
---|
13 | archives. ABCL-ASDF uses the Aether libraries of the Maven build tool |
---|
14 | to locate and download artifacts from its distributed POM graph. If |
---|
15 | Maven is not installed on your local system, the function |
---|
16 | ABCL-ASDF:INSTALL-LOCAL-MAVEN can be used to install a version under |
---|
17 | the local XDG hierarchy. |
---|
18 | |
---|
19 | Example 1 |
---|
20 | --------- |
---|
21 | |
---|
22 | For the following ASDF definition stored in a file named "log4j.asd" |
---|
23 | that can be loaded: |
---|
24 | |
---|
25 | ;;;; -*- Mode: LISP -*- |
---|
26 | (in-package :asdf) |
---|
27 | |
---|
28 | (defsystem log4j |
---|
29 | :components ((:mvn "log4j/log4j/1.2.13"))) |
---|
30 | |
---|
31 | After issuing |
---|
32 | |
---|
33 | CL-USER> (asdf:make :log4j) |
---|
34 | |
---|
35 | all the Log4j libraries would be dynamically added to the classpath so |
---|
36 | that the following code would |
---|
37 | |
---|
38 | (let ((logger (#"getLogger" 'log4j.Logger (symbol-name (gensym))))) |
---|
39 | (#"trace" logger "Kilroy wuz here.")) |
---|
40 | |
---|
41 | output the message "Kilroy wuz here" to the Log4j logging system. |
---|
42 | |
---|
43 | |
---|
44 | API |
---|
45 | --- |
---|
46 | |
---|
47 | We define an API within the ASDF package consisting of the following |
---|
48 | ASDF classes derived from ASDF:COMPONENT: |
---|
49 | |
---|
50 | JAR-DIRECTORY, JAR-FILE, and CLASS-FILE-DIRECTORY for JVM artifacts |
---|
51 | that have a currently valid pathname representation (i.e. they exist |
---|
52 | on the local filesystem). |
---|
53 | |
---|
54 | The MVN and IRI classes descend from ASDF-COMPONENT, but do not |
---|
55 | directly have a filesystem location. |
---|
56 | |
---|
57 | The IRI component is currently unused, but serves as a point to base |
---|
58 | the inheritance of the MVN component while allowing other forms of |
---|
59 | uri-like resources to be encapsulated in the future. |
---|
60 | |
---|
61 | The MVN component should specify a [Maven URI][mvn-uri] as its PATH. |
---|
62 | A Maven URI has a namestring of the form |
---|
63 | "GROUP-ID/ARTIFACT-ID/VERSION" which specifies the dependency to be |
---|
64 | satisfied for this component by resolution through the Maven |
---|
65 | distributed dependency graph. The scheme (the initial "mvn://" in a |
---|
66 | Maven URI) is implied, and usually omitted for brevity. If a VERSION |
---|
67 | is not specified (i.e. by a namestring like "GROUP-ID/ARTIFACT-ID" for |
---|
68 | the MVN component), then the latest available version of the artifact |
---|
69 | will be retrieved from the network. |
---|
70 | |
---|
71 | [mvn-uri]: http://team.ops4j.org/wiki/display/paxurl/Mvn+Protocol |
---|
72 | |
---|
73 | The MVN component may specify a CLASSNAME which if present in the |
---|
74 | current jvm, inhibits further loading from the network. This may be |
---|
75 | used to bypass the invocation of Maven. Since classnames are not |
---|
76 | unique to jar archives, this mechanism may not have the desired result |
---|
77 | in all cases, but it is surpisingly, like the rest of Java, "good |
---|
78 | enough" for everyday use. |
---|
79 | |
---|
80 | The MVN component may specify an ALTERNATE-URI which will be added to |
---|
81 | the jvm classpath if Maven cannot be located. Since a Maven URI may |
---|
82 | refer to more than one binary artifact, this may not work in all cases. |
---|
83 | |
---|
84 | For use outside of ASDF, we currently define the generic function |
---|
85 | ABCL-ASDF:RESOLVE which locates, downloads, caches, and then loads |
---|
86 | into the currently executing JVM process all recursive dependencies |
---|
87 | annotated in the ditributed Maven pom.xml graph. |
---|
88 | |
---|
89 | One can muffle the verbosity of the Maven Aether resolver by setting |
---|
90 | CL:*load-VERBOSE* to NIL. |
---|
91 | |
---|
92 | Example 2 |
---|
93 | --------- |
---|
94 | |
---|
95 | Bypassing ASDF, one can directly issue requests for the Maven |
---|
96 | artifacts to be downloaded |
---|
97 | |
---|
98 | CL-USER> (abcl-asdf:resolve "com.google.gwt:gwt-user") |
---|
99 | WARNING: Using LATEST for unspecified version. |
---|
100 | "/Users/evenson/.m2/repository/com/google/gwt/gwt-user/2.4.0-rc1/gwt-user-2.4.0-rc1.jar:/Users/evenson/.m2/repository/javax/validation/validation-api/1.0.0.GA/validation-api-1.0.0.GA.jar:/Users/evenson/.m2/repository/javax/validation/validation-api/1.0.0.GA/validation-api-1.0.0.GA-sources.jar" |
---|
101 | |
---|
102 | Notice that all recursive dependencies have been located and installed |
---|
103 | as well. |
---|
104 | |
---|
105 | ABCL-ASDF:RESOLVE does not added the resolved dependencies to the |
---|
106 | current JVM classpath. Use JAVA:ADD-TO-CLASSPATH as follows to do |
---|
107 | that: |
---|
108 | |
---|
109 | CL-USER> (java:add-to-classpath (abcl-asdf:as-classpath (abcl-asdf:resolve "com.google.gwt:gwt-user"))) |
---|
110 | |
---|
111 | Example 3 |
---|
112 | --------- |
---|
113 | |
---|
114 | For a filesystem of jar archives: |
---|
115 | |
---|
116 | ./lib/ext/flora2-reasoner/XSBFlora.jar |
---|
117 | ./lib/ext/iris-reasoner/iris/iris-0.58.jar |
---|
118 | ./lib/ext/iris-reasoner/jgrapht/jgrapht-jdk1.5-0.7.1.jar |
---|
119 | ./lib/ext/log4j/log4j-1.2.14.jar |
---|
120 | ./lib/ext/mandrax-reasoner/commons-collections-2.1.jar |
---|
121 | ./lib/ext/mandrax-reasoner/jdom-b10.jar |
---|
122 | ./lib/ext/mandrax-reasoner/log4j-1.2.8.jar |
---|
123 | ./lib/ext/mandrax-reasoner/mandarax-3.4.jar |
---|
124 | ./lib/ext/mins-reasoner/mins-v0_3.jar |
---|
125 | ./lib/ext/pellet-reasoner/aterm/1.6/aterm-java-1.6.jar |
---|
126 | ./lib/ext/pellet-reasoner/commons-logging/1.1/commons-logging-1.1.jar |
---|
127 | ./lib/ext/pellet-reasoner/kaon/1.2.9/rdfapi.jar |
---|
128 | ./lib/ext/pellet-reasoner/owl-api/1.4.3/abstractparser.jar |
---|
129 | ./lib/ext/pellet-reasoner/owl-api/1.4.3/io.jar |
---|
130 | ./lib/ext/pellet-reasoner/owl-api/1.4.3/rdfparser.jar |
---|
131 | ./lib/ext/pellet-reasoner/owl-api/1.4.3/validation.jar |
---|
132 | ./lib/ext/pellet-reasoner/owl-api/owl-api-econn/2006-04-27/api.jar |
---|
133 | ./lib/ext/pellet-reasoner/owl-api/owl-api-econn/2006-04-27/impl.jar |
---|
134 | ./lib/ext/pellet-reasoner/pellet/pellet.jar |
---|
135 | ./lib/ext/pellet-reasoner/relaxng/1.0/relaxngDatatype.jar |
---|
136 | ./lib/ext/pellet-reasoner/xsdlib/xsdlib.jar |
---|
137 | ./lib/ext/wsmo/WSML-grammar-20081202.jar |
---|
138 | ./lib/ext/wsmo/wsmo-api-0.6.2.jar |
---|
139 | ./lib/ext/wsmo/wsmo4j-0.6.2.jar |
---|
140 | ./lib/ext/xsb-system/interprolog.jar |
---|
141 | |
---|
142 | The following ASDF defintion loads enough JVM artifacts to use the |
---|
143 | [IRIS reasoner][iris-reasoner]: |
---|
144 | |
---|
145 | (defsystem :wsml2reasoner-jars |
---|
146 | :version "0.6.4" ;; last sync with SVN |
---|
147 | :defsystem-depends-on (abcl-contrib abcl-asdf) :components |
---|
148 | ((:module wsml2reasoner |
---|
149 | :pathname "lib/" :components |
---|
150 | ((:jar-file "wsml2reasoner"))) |
---|
151 | (:module iris-libs |
---|
152 | :pathname "lib/ext/iris-reasoner/iris/" :components |
---|
153 | ((:jar-file "iris-0.58"))) |
---|
154 | (:module jgrapht-libs |
---|
155 | :pathname "lib/ext/iris-reasoner/jgrapht/" :components |
---|
156 | ((:jar-file "jgrapht-jdk1.5-0.7.1"))) |
---|
157 | (:module wsmo-libs |
---|
158 | :pathname "lib/ext/wsmo/" :components |
---|
159 | ((:jar-file "WSML-grammar-20081202") |
---|
160 | (:jar-file "wsmo-api-0.6.2") |
---|
161 | (:jar-file "wsmo4j-0.6.2"))) |
---|
162 | (:module log4j-libs |
---|
163 | :pathname "lib/ext/log4j/" :components |
---|
164 | ((:jar-file "log4j-1.2.14"))))) |
---|
165 | |
---|
166 | [iris-reasoner]: http://www.iris-reasoner.org/ |
---|
167 | |
---|
168 | #### Colophon |
---|
169 | |
---|
170 | Mark <evenson.not.org@gmail.com> |
---|
171 | |
---|
172 | Created: 2011-01-01 |
---|
173 | Revised: 2023-02-23 |
---|
174 | |
---|
175 | |
---|