Scanning multi version jars?

Alan Bateman Alan.Bateman at oracle.com
Thu Sep 14 10:44:24 UTC 2017


On 14/09/2017 10:58, Weijun Wang wrote:
> :
> I know an MR jar allows you to shadow a class file with a release-specific one, but what if the new release has removed an old class? It will not appear in the release-specific directory but still exists in the root. Should we describe this in the MANIFEST?
>
A MR JAR is not intended to support multiple versions of the same 
library, instead the versioned sections are for classes that take 
advantage of newer language or API features. They help with the 
migration from using JDK internal APIs to supported/standard APIs for 
example. So I don't think it should be complicated by an additional list 
of entries to "hide" in the base or overlaid version sections.

Greg's mail doesn't say if Bar is public so I can't tell if his example 
involves an attempted API change or not. Assuming Bar is not public then 
compiling the 9 version of Foo.java will generate Foo.class and no 
Foo$Bar.class. This doesn't mean it's completely orphaned of course as 
there may be other classes in the base section, and in the same package, 
that were compiled with references to Bar. The `jar` tool could do some 
additional validation to catch these references and so avoid 
IncompatibleClassChangeError at runtime (as might arise if 
getEnclosingClass were invoked on the inner class). That would help with 
Greg's annotation scanning scenario too.

-Alan


More information about the core-libs-dev mailing list