Changeset 14693


Ignore:
Timestamp:
04/22/14 12:14:21 (3 years ago)
Author:
mevenson
Message:

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.

Location:
trunk/abcl/contrib/asdf-jar
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/abcl/contrib/asdf-jar/asdf-jar.asd

    r14615 r14693  
    44(defsystem :asdf-jar
    55  :author "Mark Evenson"
    6   :version "0.2.1"
    7   :description "<> asdf:defsystem <urn:abcl.org/release/1.3.0/contrib/asdf-jar#0.2.1>"
     6  :version "0.3.0"
     7  :description "<> asdf:defsystem <urn:abcl.org/release/1.3.0/contrib/asdf-jar#0.3.0>"
    88  :components
    99  ((:module base :pathname "" :components
  • trunk/abcl/contrib/asdf-jar/asdf-jar.lisp

    r14440 r14693  
    66  (:use :cl)
    77  (:export #:package
     8           ;; "Si vis pacem, para bellum" -- Publius Flavius Vegetius Renatus
     9           #:prepare-for-war
    810           #:add-to-asdf))
    911
    10 (in-package :asdf-jar)
     12(in-package #:asdf-jar)
    1113
    1214(defvar *debug* nil)
    1315
    14 (defun package (system
    15           &key (out #p"/var/tmp/")
    16                (recursive t)          ; whether to package dependencies
    17                (force nil)            ; whether to force ASDF compilation
    18                (verbose t))
     16(defun package (system &key
     17                         (out #p"/var/tmp/")
     18                         (recursive t)          ; whether to package dependencies
     19                         (force nil)            ; whether to force ASDF compilation
     20                         (root nil)
     21                         (verbose t))
    1922"Compile and package the asdf SYSTEM in a jar.
    2023
     
    3235  (let* ((name
    3336          (slot-value system 'asdf::name))
    34          (version
    35           (handler-case (slot-value system 'asdf:version)
    36             (unbound-slot () "unknown")))
     37         (version (let ((v (slot-value system 'asdf:version)))
     38                    (when v
     39                      v)))
    3740         (package-jar-name
    38           (format nil "~A~A-~A" name (if recursive "-all" "") version))
     41          (format nil "~A~A~A" name (if recursive "-all" "") (if version
     42                                                                 (format nil "-~A" version)
     43                                                                 "")))
    3944         (package-jar
    4045          (make-pathname :name package-jar-name
     
    5863            (name (slot-value system 'asdf::name))
    5964            (asdf (slot-value system 'asdf::source-file)))
    60         (setf (gethash asdf mapping) (archive-relative-path base name asdf))
     65        (setf (gethash asdf mapping) (let ((relative-path (archive-relative-path
     66                                                           base name asdf)))
     67                                       (if root
     68                                         (merge-pathnames
     69                                          relative-path
     70                                          (make-pathname :directory root))
     71                                         relative-path)))
    6172        (loop :for component :in (all-files system)
    6273           :for source = (slot-value component 'asdf::absolute-pathname)
    6374           :for source-entry = (archive-relative-path base name source)
    6475           :do (setf (gethash source mapping)
    65                      source-entry)
     76                     (if root
     77                         (merge-pathnames source-entry (make-pathname :directory root))
     78                         source-entry))
    6679           :do (when *debug*
    6780                 (format verbose "~&~A~& => ~A" source source-entry))
     
    7386                       :type "abcl"))
    7487                     (output-entry
    75                       (make-pathname :defaults source-entry
    76                                      :type "abcl")))
     88                      (make-pathname :defaults source-entry
     89                                     :type "abcl"
     90                                     :directory (append root
     91                                                        (rest (pathname-directory source-entry))))))
    7792                 (when *debug*
    7893                   (format verbose "~&~A~& => ~A" output output-entry))
     
    141156                            :inherit-configuration))))
    142157
     158(defun prepare-for-war (system &key
     159                                 (out #p"/var/tmp/")
     160                                 (recursive nil)          ; whether to package dependencies
     161                                 (force nil)            ; whether to force ASDF compilation
     162                                 (root (list :relative "WEB-INF" "resources"))
     163                                 (verbose t))
     164  "Package named asdf SYSTEM for deployment in a Java Servlet container war file.
     165
     166c.f. PACKAGE for further options."
     167
     168  (warn "Unaudited.  Please see your local Honey dealer.")
     169  (package system :out out :recursive recursive :force force :verbose verbose
     170           :root root))
     171
     172
    143173(provide :asdf-jar)
Note: See TracChangeset for help on using the changeset viewer.