[Armedbear-cvs] r14693 - trunk/abcl/contrib/asdf-jar

mevenson at common-lisp.net mevenson at common-lisp.net
Tue Apr 22 12:14:21 UTC 2014


Author: mevenson
Date: Tue Apr 22 12:14:21 2014
New Revision: 14693

Log:
PREPARE-FOR-WAR packages ASDF systems for deployment in WAR archives.

With archives packages under 'WEB-INF/resources', placing these jar
files in the 'WEB-INF/lib' directory enables the Java Servlet
ServletContext().getResourceAsStream() method to access their
contents.

Modified:
   trunk/abcl/contrib/asdf-jar/asdf-jar.asd
   trunk/abcl/contrib/asdf-jar/asdf-jar.lisp

Modified: trunk/abcl/contrib/asdf-jar/asdf-jar.asd
==============================================================================
--- trunk/abcl/contrib/asdf-jar/asdf-jar.asd	Tue Apr 22 11:27:52 2014	(r14692)
+++ trunk/abcl/contrib/asdf-jar/asdf-jar.asd	Tue Apr 22 12:14:21 2014	(r14693)
@@ -3,8 +3,8 @@
 
 (defsystem :asdf-jar
   :author "Mark Evenson"
-  :version "0.2.1"
-  :description "<> asdf:defsystem <urn:abcl.org/release/1.3.0/contrib/asdf-jar#0.2.1>"
+  :version "0.3.0"
+  :description "<> asdf:defsystem <urn:abcl.org/release/1.3.0/contrib/asdf-jar#0.3.0>"
   :components 
   ((:module base :pathname "" :components
 	    ((:file "asdf-jar")

Modified: trunk/abcl/contrib/asdf-jar/asdf-jar.lisp
==============================================================================
--- trunk/abcl/contrib/asdf-jar/asdf-jar.lisp	Tue Apr 22 11:27:52 2014	(r14692)
+++ trunk/abcl/contrib/asdf-jar/asdf-jar.lisp	Tue Apr 22 12:14:21 2014	(r14693)
@@ -5,17 +5,20 @@
 (defpackage #:asdf-jar
   (:use :cl)
   (:export #:package 
+           ;; "Si vis pacem, para bellum" -- Publius Flavius Vegetius Renatus
+           #:prepare-for-war 
            #:add-to-asdf))
 
-(in-package :asdf-jar)
+(in-package #:asdf-jar)
 
 (defvar *debug* nil)
 
-(defun package (system
-          &key (out #p"/var/tmp/") 
-               (recursive t)          ; whether to package dependencies
-               (force nil)            ; whether to force ASDF compilation
-               (verbose t))
+(defun package (system &key 
+                         (out #p"/var/tmp/") 
+                         (recursive t)          ; whether to package dependencies
+                         (force nil)            ; whether to force ASDF compilation
+                         (root nil)
+                         (verbose t))
 "Compile and package the asdf SYSTEM in a jar.
 
 When RECURSIVE is true (the default), recursively add all asdf
@@ -31,11 +34,13 @@
              (setf system (asdf:find-system system)))
   (let* ((name 
           (slot-value system 'asdf::name))
-         (version 
-          (handler-case (slot-value system 'asdf:version)
-            (unbound-slot () "unknown")))
+         (version (let ((v (slot-value system 'asdf:version)))
+                    (when v
+                      v)))
          (package-jar-name 
-          (format nil "~A~A-~A" name (if recursive "-all" "") version))
+          (format nil "~A~A~A" name (if recursive "-all" "") (if version 
+                                                                 (format nil "-~A" version)
+                                                                 "")))
          (package-jar
           (make-pathname :name package-jar-name
                          :type "jar"
@@ -57,12 +62,20 @@
       (let ((base (slot-value system 'asdf::absolute-pathname))
             (name (slot-value system 'asdf::name))
             (asdf (slot-value system 'asdf::source-file)))
-        (setf (gethash asdf mapping) (archive-relative-path base name asdf))
+        (setf (gethash asdf mapping) (let ((relative-path (archive-relative-path 
+                                                           base name asdf)))
+                                       (if root
+                                         (merge-pathnames
+                                          relative-path
+                                          (make-pathname :directory root))
+                                         relative-path)))
         (loop :for component :in (all-files system) 
            :for source = (slot-value component 'asdf::absolute-pathname)
            :for source-entry = (archive-relative-path base name source)
            :do (setf (gethash source mapping)
-                     source-entry)
+                     (if root 
+                         (merge-pathnames source-entry (make-pathname :directory root))
+                         source-entry))
            :do (when *debug*
                  (format verbose "~&~A~& => ~A" source source-entry))
            :when (and (typep component 'asdf::source-file)
@@ -72,8 +85,10 @@
                        :defaults (asdf:apply-output-translations source)
                        :type "abcl"))
                      (output-entry 
-                      (make-pathname :defaults source-entry
-                                     :type "abcl")))
+                      (make-pathname :defaults source-entry 
+                                     :type "abcl"
+                                     :directory (append root
+                                                        (rest (pathname-directory source-entry))))))
                  (when *debug*
                    (format verbose "~&~A~& => ~A" output output-entry))
                  (setf (gethash output mapping)
@@ -140,4 +155,19 @@
      `(:output-translations (,(merge-pathnames "/**/*.*" jar)) 
                             :inherit-configuration))))
 
+(defun prepare-for-war (system &key 
+                                 (out #p"/var/tmp/") 
+                                 (recursive nil)          ; whether to package dependencies
+                                 (force nil)            ; whether to force ASDF compilation
+                                 (root (list :relative "WEB-INF" "resources"))
+                                 (verbose t))
+  "Package named asdf SYSTEM for deployment in a Java Servlet container war file. 
+
+c.f. PACKAGE for further options."
+
+  (warn "Unaudited.  Please see your local Honey dealer.")
+  (package system :out out :recursive recursive :force force :verbose verbose
+           :root root))
+
+
 (provide :asdf-jar)




More information about the armedbear-cvs mailing list