Agree with Andreas, I can see MRJars usefulness too. APIs with lambdas come to mind as a good example, or interfaces with default implementations, are just a couple features of Java8 which I've avoided adding because of needing backward compatibility.

Eclipse's maven support in general is very subpar... and it may be difficult to avoid having multiple projects for different runtimes - but I could envision a scenario where I'd simply have my project configured in Eclipse as Java9, but in my pom configured for other builds. Eclipse wouldn't be able to tell me if a particular piece of code was compatible with the other runtimes, but maven sure would, and maybe Eclipse will add the capability. In any event I wouldn't want the limitations of a particular IDE to drive the POM design and in particular require multi-projects when a single project could suffice. If I as the end user can live with the limitations of the IDE (e.g. not being multi-runtime aware) then I should be allowed to do so.

Richard Sand | CEO
IDF Connect, Inc.
2207 Concord Ave, #359
Wilmington | Delaware 19803 | USA
Office: +1 888 765 1611 | Fax: +1 866 765 7284
Mobile: +1 267 984 3651




------ Original Message ------
From: "Andreas Gudian" <[email protected]>
To: "Maven Developers List" <[email protected]>
Sent: 8/31/2016 4:52:16 PM
Subject: Re: Building jar targeting multiple Java versions, including 9

2016-08-31 22:02 GMT+02:00 Tibor Digana <[email protected]>:

>>So, we can try to have different source folders for different runtimes.
 No. If you are developers you would not say this.
 No developer would develop and merge the same code multiple times!!!
 Look, now let the maven-compiler-plugin to download jars of the same
 artifact which was released for Version 1.7 and 1.8, and now let the
 compiler wrap those two versions with current version 1.9 which is
 ready to be released. Now you have fat jar MRjar.
This means any Java version of the artifact can be chosen on the top of
 JDK9.

>>Most other plugins would need to be executed for each version as well -
 javadoc, junit
 No. because the previous Versions were already tested and processed.

 >>Again if they *don't* need a separate execution, then why is MRJar
 needed?
Exactly, and now I cannot imaging company which is going to complicate
 their project with a stupid MRJar and why so if they have WildFly
 8.2.1 which supports Java 8 do you think they EE project would
 struggle with MRJar? Of course not. If they have WildFly 10.x
 supporting Java 9 then again no developer would build MRJar.

 I think MRJar is suitable only for JDK internals and it is only
because of Oracle has problem with JCP because JCP does not let Oracle
 to break backwards compatibility and introduce dynamic language
 features. So Oracle is trying for compromise.
 Oracle is trying to let you build java.* JDK with javac, interchange
 internal modules, etc.
 Nothing for other non-JDK projects.


That's a bit off-topic, as this thread is about the _how_ and not the
_why_, but I'd like to point out that I disagree with you here ;). MRJars would be great for a lot of frameworks and libraries that you would _use_
in your end-product. Frameworks that offer different alternatives or
extended features requiring a newer JDK now have to build and maintain
artifacts either with different versions or with different artifactIds
(e.g. funky-annotations and funky-annotations-jdk8, where the -jdk8 variant contains annotations with @Repeatable) -- there are a lot of examples out there. And that's not only cumbersome for maintainers, but also for users
(which is the bad thing).

So go MRjars! Making them easily consumable for users is the top-prirority
and it looks like a solid approach.

Making them easy to build for the maintainers is way less important (as
that's only a tiny percentage of the maven-users out there), but it sure
needs to work with different IDEs and especially Eclipse would have
problems handling different target JDKs in the same project.

So for me as an Eclipse user, I'd have to take the road with the
multi-module projects. But that's okay, as I'm just building a framework and separating the different variants for different JDKs has also a lot of benefits, as already described above: testing, generating javadocs, and all that other stuff is already there and can be used without having to change anything. For me, a project collecting the internally seperate artifacts
and combining them into an MRjar would be totally fine.

Andreas




 --
 Cheers
 Tibor

 ---------------------------------------------------------------------
 To unsubscribe, e-mail: [email protected]
 For additional commands, e-mail: [email protected]




---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to