Jar within a jar throws a runtime error


  • Type: Defect Defect
  • Status: Closed Closed
  • Priority: Minor Minor
  • Resolution: Declined
  • Affects Version/s: Release 1.2, Release 1.3
  • Fix Version/s: Release 1.7
  • Component/s: None
  • Labels:
  • Environment:
    Maven using the one-jar plugin
  • Patch:
  • Approval:


The code in RT.load() will load a class by name in several situations. One of these is when a .class resource exists, a .clj resource exists and the class is newer than the clj file. To determine the age of the class and clj, a call is made into RT.lastModified with the resource URL. If the URL is a jar protocol, then RT.lastModified() will try to open a connection to that jar, find the entry in the jar, and return its time.

Sometimes deployment occurs using nested jar files (for example: and custom classloaders. In this usage, the jar file can be opened, but the entry will not be found and an NPE will result during load:

Caused by: java.lang.NullPointerException
    at clojure.lang.RT.lastModified(
    at clojure.lang.RT.load(
    at clojure.lang.RT.load(
    at clojure.lang.RT.doInit(
    at clojure.lang.RT.<clinit>(
... 7 more

Proposal: Make lastModified() more tolerant of finding a null entry and falling back to return the last modified date of the jar file itself.

Patch: clj-971-2.patch

Screened by:

  1. clj-971-1.patch
    24/Nov/13 7:11 AM
    1 kB
    Paavo Parkkinen
  2. clj-971-2.patch
    25/Nov/13 6:19 AM
    2 kB
    Paavo Parkkinen



Vote (2)
Watch (3)


  • Created: