8 can deal with multi-release JARs. The extra goop is ignored. So a
7/8/9 MRJar is perfectly possible (and in fact, the whole point of doing
them in the first place, so library writers could publish JARs that span
7/8/9.)
On 5/2/2017 2:50 AM, Jeremy Manson wrote:
Maybe when there's something breaking in Java 10 or 11, I can do
that. Right now, that approach requires me to have a fork of my code,
have special build goop, rely on yet another Java 9 feature, and make
my relatively widely used OSS project require Java 9 to build /prior
to Java 9's release -/ just so I can save maybe 15-20 lines of code.
Meanwhile, I'm not having a lot of luck - adding what seems to be the
right reflective call doesn't seem to allow me to modify classes like
ArrayList. Trying to create a boiled down repro (in 30 minute chunks
between management tasks - sigh).
OffTopic, but possibly of interest to you: it has also been
challenging to figure out how we're going to migrate our users away
from features like Xbootclasspath. Our standard operating procedure
(which has worked from 5 to 6 to 7 to 8) is to get the codebase into a
state where it can work both with the previous version and the new
version of the JDK, and then throw the switch.
If we follow this path, before we migrate to Java 9, we would need to
make sure all of our code builds and the tests pass with Java 9 and
Java 8. We can't make all of the code build and the tests pass with
Java 9 as-is, because many of them use options like Xbootclasspath,
which have been dropped. We can't migrate those tests to use the new
command line flags before we migrate to Java 9, because if we do, they
will stop working with Java 8. Due to the size of our code base, it's
pretty much impossible to migrate all of the users to a new set of
command line flags at the same time as we migrate to Java 9.
Between that and the amount of reflective access we do into the JDK,
we'll probably just end up re-adding features like Xbootclasspath in
our fork and enabling the big kill switch for everyone, and then
removing it gradually over the lifetime of Java 9. We've had to do
that for some minor stuff before, but nothing this big. I'm glad we
have options like that, and don't envy people with large codebases who
don't.
That said, we probably abuse the ability to crack open the JDK more
than most people.
I've been dealing with some of the concerns about upgradability for
some of Google's open-source projects lately, and I am insisting that
we have a rule that there is always an intermediate version that
provides backwards compatibility for any desired change, so that users
can always perform stepwise migrations. Thanks for the inspiration. :)
Jeremy
On Mon, May 1, 2017 at 5:38 PM, Brian Goetz <brian.go...@oracle.com
<mailto:brian.go...@oracle.com>> wrote:
Or use multi-release JARs.
On 4/25/2017 3:14 AM, Jeremy Manson wrote:
I guess I can call it reflectively.