ant-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Stefan Bodewig <>
Subject Multi-Release JARs
Date Sat, 17 Sep 2016 14:53:51 GMT
Hi all

Jan an I met at a local JUG last Thursday and quickly chatted about ways
Ant could support Multi-Release JARs.

For details see

In short the jar is a ZIP file as it has always been. It is possible to
bundle classes and resources targeting different Java versions in a
single archive. Classes and resources for Java 8 and before go where
they've always gone - as files inside the typical hierarchy. Files that
shall overlay those files (or additional files for Java 9+) go into a
similar shaped hierarchy in META-INF/versions/VERSION. I.e. if class
org.example.Foo has a new feature for Java9 but Java8 shall use the
"normal version" you'd have


The new jar implementation will first look into the META-INF/versions/X
directory for the current version X, then any lower version should one
exist and finally the "normal" place for a class or resource.

Things I see we could do (and I'm sure this list is not exhaustive):

* provide a new kind of <zipfileset> that uses
  META-INF/versions/${version} as prefix to the stuff to be included in
  a jar. I.e.

  <jar ...>
     <new-kind-of-zipfileset dir="java9-classes" version="9"/>

  would package the content of java9-classes/** under

* provide a new kind of <zipfileset> that mimics the selection logic
  when reading from a jar. I.e.

  <new-kind-of-zipfileset src="some.jar" version="9"/>

  will include the contents and meta-data like timestamp of
  META-INF/versions/9/org/example/Foo.class using the name

* Multi-Release JARs need a special manifest attribute, we should add an
  attribute to the jar task that sets this.



To unsubscribe, e-mail:
For additional commands, e-mail:

View raw message