On Tue, Apr 14, 2015 at 10:32 AM, Arnaud Héritier <aherit...@gmail.com>
wrote:

> On Tue, Apr 14, 2015 at 8:29 AM, Hervé BOUTEMY <herve.bout...@free.fr>
> wrote:
>
> > Le lundi 13 avril 2015 12:19:57 Paul Benedict a écrit :
> > > This is the example project structure I had in mind:
> > >
> > > mvjar-example/
> > >    minjava/
> > >      src/main/java
> > >      src/test/java
> > >    java7/
> > >      src/main/java
> > >      src/test/java
> > >    java8/
> > >      src/main/java
> > >      src/test/java
> > >
> > > The "minjava" and "java7" and "java8" are not special names (just names
> > to
> > > denote what kind of Java source is inside). As Herve noted, "minjava"
> > would
> > > contain the source minimum Java version; "java7" would contain the java
> > > 7-specific sources, and "java8" would contain the java 8-specific
> > sources.
> > like Gary answered, I think that it'll be better if we stick with java#,
> > or j#
> >
> > And in this example, we'll require another module for the mvjar, that
> will
> > combine result fo every other module
> >
>
>
> I really hate when maven enforces us to create modules for its own
> technical reasons. (And I know I'm not the only one)
>
+1

>
>
> >
> > >
> > > I don't see any added difficulty with regard to testing. If you already
> > > have code that tests a specific Java X version, just extract that into
> > its
> > > own test case file and place it in the appropriate project. At most all
> > > you're doing is minor refactoring.
> > after thinking at it, true
> > this module layout is definitely really clear, that's a big advantage!
> > one thing that it makes really clear is javadoc, too, since javadoc in a
> > mv-
> > module is a challenge :)
> >
> > we should try it with plexus-utils, in another branch
> >
> > >
> > > This will create three JARs of course (or at least today). I don't see
> > that
> > > as a big deal since authors may decide to distribute this way where
> MVJAR
> > > isn't supported (like pre-Java 9 JVMs).
> > IMHO, not really, since the minimum version module will contain
> absolutely
> > every classes, but the other modules will contain only a few classes =
> the
> > few
> > code that is rewritten to take advantage of newer JDK
> >
> > Compatibility with old jdks that do not support mvjar is built into mvjar
> > JEP:
> > a JVM that does not support mvjar extension will see minimum version
> > modules
> > (and useless content in /META-INF/versions/)
> >
> > notice that every module will ave its own GAV coordinates: the last mvjar
> > module will have the end-user coordinates, where every
> JDK-version-specific
> > module will have an artifactId = artifactId-java# (that's a generic
> > convention
> > we should try to push forward)
> >
> > > However, if we can bind up all the
> > > jars into one in a post-processing phrase, you can then meet the MVJAR
> > > specification.
> > >
> > > PS: I really don't know if an "mvjar" type is necessary. Honestly, I
> hope
> > > it's not. I thought it was needed in the beginning, but am not sure
> > > anymore. Opinions appreciated.
> > I don't know if the merging will require a dedicated packaging: we'll see
> > later
> >
> > now it's time to test on plexus-utils: givent this idea doesn't involve
> > much
> > new things in maven, I'm pretty sure we can make it full functional!
> >
> > I'll try to do it tonight if nobody beats me at it
> >
> > Regards,
> >
> > Hervé
> >
> > >
> > >
> > >
> > > Cheers,
> > > Paul
> > >
> > > On Mon, Apr 13, 2015 at 1:28 AM, nicolas de loof <
> > nicolas.del...@gmail.com>
> > >
> > > wrote:
> > > > I expect we could run the unit test suite on JDK 6 / 7 / 8 in
> parallel
> > > > with
> > > > 7/8 specific code being used for the JDK that do support them, so I
> > wonder
> > > > such a multi-module setup would work in this scenario, or would need
> > yet
> > > > another maven module for tests :'(
> > > >
> > > > 2015-04-12 23:33 GMT+02:00 Hervé BOUTEMY <herve.bout...@free.fr>:
> > > > > Le samedi 11 avril 2015 21:42:50 Paul Benedict a écrit :
> > > > > > I've been giving this subject lots of thought in some of spare
> > time.
> > > >
> > > > IMO,
> > > >
> > > > > > the most straightforward way of meeting the requirement of the
> > MVJAR
> > > > > > is
> > > > >
> > > > > to
> > > > >
> > > > > > break up one's JAR project into separate modules. One module
> would
> > > > >
> > > > > contain
> > > > >
> > > > > > the version independent code, and then other modules would be per
> > Java
> > > > > > version.
> > > > >
> > > > > more precisely: the first module would contain the source for
> minimum
> > > >
> > > > Java
> > > >
> > > > > version: sometimes, it will contain code that won't run with later
> > JRE
> > > > >
> > > > > > This kind of slicing is necessary because you do need different
> > > > > > kinds of compiler directives (like -source), different JREs to
> run
> > > > > > unit
> > > > > > tests differently, and most importantly, the different JREs to
> > allow
> > > > > > debugging according to the Java version you want to test.
> > > > > >
> > > > > > The other piece that doesn't yet exist is a way to bundle the
> > modules
> > > > >
> > > > > into
> > > > >
> > > > > > one jar. Perhaps this can be accomplished by introducing a new
> > "mvjar"
> > > > > > Maven type.
> > > > >
> > > > > I didn't imagine this scenario: no Maven plugins updates nor IDE,
> > "just"
> > > >
> > > > a
> > > >
> > > > > new
> > > > > feature to merge multiple modules into on MV jar
> > > > >
> > > > > interesting idea, in fact: this would seriously reduce the impact
> on
> > > > > tooling,
> > > > > even if the result is less compact, ie creates a lot of Maven
> modules
> > > > >
> > > > > and I am wondering what unit tests will look like for additional
> > > >
> > > > versions:
> > > > > the
> > > > > good thing is that they can be tweaked easily. Then bad thing is
> > that we
> > > > > may
> > > > > end up in copy/pasting them
> > > > >
> > > > > Regards,
> > > > >
> > > > > Hervé
> > > > >
> > > > > > Paul
> > > > > >
> > > > > >
> > > > > > Cheers,
> > > > > > Paul
> > > > > >
> > > > > > On Sat, Apr 11, 2015 at 9:37 AM, Hervé BOUTEMY <
> > herve.bout...@free.fr>
> > > > > >
> > > > > > wrote:
> > > > > > > Le samedi 11 avril 2015 15:35:02 Kristian Rosenvold a écrit :
> > > > > > > > Technically we support "main" scoped sources in java6 and
> > "test"
> > > > > > > > scoped sources in java7 today, but the feature is largely
> > unusable
> > > > > > > > since IDE support is totally missing. Even IntelliJ does not
> > > >
> > > > support
> > > >
> > > > > > > > it (https://youtrack.jetbrains.com/issue/IDEA-85478 and
> other
> > > > >
> > > > > issues)
> > > > >
> > > > > > > > :(
> > > > > > > >
> > > > > > > > There might be some hope of gaining some kind of traction to
> > both
> > > > > > > > source and main-level support of multi-language-level
> modules.
> > > >
> > > > Maybe
> > > >
> > > > > > > > something like (src/main/java and src/test/java = "default
> > > >
> > > > language"
> > > >
> > > > > > > > level) while src/[main|test]/java-8 would be a specific
> > language
> > > > > > > > level. This sounds infinitely cool,
> > > > > > >
> > > > > > > yes, that's what I did in plexus-utils jdep-238 branch
> > > >
> > > >
> https://github.com/codehaus-plexus/plexus-utils/tree/jep-238/src/main
> > > >
> > > > > > > > but also like a great can of worms
> > > > > > > >
> > > > > > > > :)
> > > > > > >
> > > > > > > yes, I fear it's not so easy for IDEs...
> > > > > > >
> > > > > > > > I assume minimum compiler requirement would be java-8 for a
> > > > > > > > project
> > > > > > > >
> > > > > > > > with src/main/java-8 ?
> > > > > > >
> > > > > > > yes, I think that's what makes such support hard at the moment:
> > > > require
> > > >
> > > > > > > the
> > > > > > > highest JDK, and signature for every lower JDK to avoid newer
> > APIs
> > > > > > > unless JDK 9 can safely compile for any older target, checking
> > the
> > > >
> > > > API
> > > >
> > > > > > > (without having to run Animal Sniffer after that)
> > > > > > >
> > > > > > > Regards,
> > > > > > >
> > > > > > > Hervé
> > > > > > >
> > > > > > > > K
> > > > > > > >
> > > > > > > > 2015-04-11 15:11 GMT+02:00 Hervé BOUTEMY <
> > herve.bout...@free.fr>:
> > > > > > > > > Le samedi 11 avril 2015 10:54:34 Kristian Rosenvold a
> écrit :
> > > > > > > > >> IDE support for multiple source trees seems quite far off
> ?
> > > > > > > > >
> > > > > > > > > IDE support for current situation, where we mix multiple
> Java
> > > > > > > > > API
> > > > > > >
> > > > > > > versions
> > > > > > >
> > > > > > > > > in one single source tree, is even more far off!
> > > > > > > > >
> > > > > > > > > With separate source trees, IDE support starts like we are
> at
> > > > > > > > > the
> > > > > > >
> > > > > > > moment =
> > > > > > >
> > > > > > > > > no IDE support
> > > > > > > > >
> > > > > > > > > but IDEs that want to do something about it have a chance:
> > > > > > > > > that's
> > > > >
> > > > > the
> > > > >
> > > > > > > big
> > > > > > >
> > > > > > > > > difference IMHO
> > > > > > > > >
> > > > > > > > > Regards,
> > > > > > > > >
> > > > > > > > > Hervé
> > > > > > > > >
> > > > > > > > >> Kristian
> > > > > > > > >>
> > > > > > > > >> 2015-04-11 8:51 GMT+02:00 Hervé BOUTEMY <
> > herve.bout...@free.fr
> > > > > > > > >>
> > > > > > > > >> > Hi,
> > > > > > > > >> >
> > > > > > > > >> > Yesterday at DevoxxFR, Carlos Sanchez, Arnaud Héritier,
> > > >
> > > > Nicolas
> > > >
> > > > > de
> > > > >
> > > > > > > Loof
> > > > > > >
> > > > > > > > >> > and me met Brian Goetz and discussed about the objective
> > of
> > > >
> > > > JEP
> > > >
> > > > > 238
> > > > >
> > > > > > > and
> > > > > > >
> > > > > > > > >> > what we could get from such a feature.
> > > > > > > > >> >
> > > > > > > > >> > Having a face to face explanation in front of a white
> > board
> > > >
> > > > gave
> > > >
> > > > > > > > >> > interesting ideas: then, *as library maintainer*, I
> tried
> > to
> > > > > > > > >> > modifiy
> > > > > > > > >> > plexus-utils code to use MVJAR for Java 7 enhancement
> that
> > > > > > > > >> > are
> > > > > > > > >> > currently
> > > > > > > > >> > triggerred through reflection
> > > > > > > > >> >
> > > > > > > > >> >
> > > > > > > > >> > Here is the result [1]:
> > > > > > > > >> >
> > > > > > > > >> > I extracted 2 little xxxMv classes containing only the
> few
> > > > >
> > > > > methods
> > > > >
> > > > > > > that
> > > > > > >
> > > > > > > > >> > had to be enhanced when runing on Java 7, replacing the
> > > > > > > > >> >
> > > > > > > > >> >     if (Java7Detector.isJava7()) {
> > > > > > > > >> >
> > > > > > > > >> >       // java 7
> > > > > > > > >> >
> > > > > > > > >> >     } else {
> > > > > > > > >> >
> > > > > > > > >> >      // Java 5
> > > > > > > > >> >
> > > > > > > > >> >     }
> > > > > > > > >> >
> > > > > > > > >> > stanza with the default Java 5 code in the main
> > src/main/java
> > > > > > > > >> > source
> > > > > > > > >> > tree
> > > > > > > > >> > and Java 7 reimplementation in src/main/java-7 source
> tree
> > > > > > > > >> >
> > > > > > > > >> > and I did cleanup: removed Java7Detector and moved
> > NioFiles
> > > > > > > > >> > to
> > > > >
> > > > > this
> > > > >
> > > > > > > > >> > java-7
> > > > > > > > >> > specific source tree
> > > > > > > > >> >
> > > > > > > > >> >
> > > > > > > > >> > the result is a main src/main/java source tree that can
> be
> > > > >
> > > > > compiled
> > > > >
> > > > > > > > >> > with
> > > > > > > > >> > JDK 5 and a src/main/java-7 source tree that is minimal
> > to be
> > > > > > >
> > > > > > > compiled
> > > > > > >
> > > > > > > > >> > with JDK 7
> > > > > > > > >> >
> > > > > > > > >> >
> > > > > > > > >> > I still didn't try to update pom.xml to see what
> > > > > > >
> > > > > > > maven-compiler-plugin
> > > > > > >
> > > > > > > > >> > and
> > > > > > > > >> > maven-jar-plugin configurations could look like.
> > > > > > > > >> >
> > > > > > > > >> > and I don't know if javac will be enhanced to do the 2
> > > > >
> > > > > compilations
> > > > >
> > > > > > > in
> > > > > > >
> > > > > > > > >> > 1
> > > > > > > > >> > command like "javac -target 1.5 src/main/java -target
> 1.7
> > > > > > > > >> > src/main/java-7"
> > > > > > > > >> > or if it'l have to launch 2 javac one after the other
> > > > > > > > >> >
> > > > > > > > >> > I didn't look at maven-jar-plugin to see if it uses
> "jar"
> > > > >
> > > > > command
> > > > >
> > > > > > > that
> > > > > > >
> > > > > > > > >> > will be enhanced to mix multiple target/classes or if it
> > uses
> > > > > > >
> > > > > > > JarFile
> > > > > > >
> > > > > > > > >> > class then will need to code the mix
> > > > > > > > >> >
> > > > > > > > >> > and I don't know if javac will have tru crossplatform
> > > > >
> > > > > compilation
> > > > >
> > > > > > > > >> > option,
> > > > > > > > >> > to avoid using 2 JDKs (ie JDK 5 for compiling java 5
> code
> > and
> > > > >
> > > > > being
> > > > >
> > > > > > > > >> > sure
> > > > > > > > >> > there is no Java 7 API reference, and JDK 7 for the
> java 7
> > > >
> > > > part)
> > > >
> > > > > > > > >> > I see there will be impact on tooling, and if javac
> does a
> > > >
> > > > part
> > > >
> > > > > of
> > > > >
> > > > > > > the
> > > > > > >
> > > > > > > > >> > job,
> > > > > > > > >> > this will be a lot easier to implement at Maven level
> > > > > > > > >> >
> > > > > > > > >> >
> > > > > > > > >> > But at the moment, my objective was not from Maven point
> > of
> > > >
> > > > view
> > > >
> > > > > > > > >> > but
> > > > > > > > >> > library developper point of view: show a real world case
> > of
> > > >
> > > > how
> > > >
> > > > > an
> > > > >
> > > > > > > > >> > existing library could be refactored to use the feature,
> > > > >
> > > > > expecting
> > > > >
> > > > > > > that
> > > > > > >
> > > > > > > > >> > the new source code would be easier to maintain
> > > > > > > > >> >
> > > > > > > > >> >
> > > > > > > > >> > WDYT?
> > > > > > > > >> >
> > > > > > > > >> > Regards,
> > > > > > > > >> >
> > > > > > > > >> > Hervé
> > > > > > > > >> >
> > > > > > > > >> >
> > > > > > > > >> >
> > > > > > > > >> >
> > > > > > > > >> > [1]
> > > > >
> > > > >
> > https://github.com/codehaus-plexus/plexus-utils/tree/jep-238/src/main/j
> > > > >
> > > > > > > > >> > av
> > > > > > > > >> > a-7/org/codehaus/plexus/util>
> > > > > > > > >> >
> > > > > > > > >> > Le jeudi 19 mars 2015 23:38:32 Robert Scholte a écrit :
> > > > > > > > >> >> Hi,
> > > > >
> > > > > > > > >> >> we've been asked to give our opinion on the JEP 238:
> > > > > Multi-Version
> > > > >
> > > > > > > JAR
> > > > > > >
> > > > > > > > >> >> Files
> > > > > > > > >> >>
> > > > > > > > >> >> Here's a quote from Rory O'Donnels e-mail:
> > > > > > > > >> >> ---
> > > > > > > > >> >>
> > > > > > > > >> >>   It's goal is to extend the JAR file format to allow
> > > >
> > > > multiple,
> > > >
> > > > > > > > >> >>   JDK
> > > > > > > > >> >>
> > > > > > > > >> >> release-specific versions of class
> > > > > > > > >> >>
> > > > > > > > >> >>   files to coexist in a single file. An additional goal
> > is
> > > > > > > > >> >>   to
> > > > > > >
> > > > > > > backport
> > > > > > >
> > > > > > > > >> >>   the
> > > > > > > > >> >>
> > > > > > > > >> >> run-time changes to
> > > > > > > > >> >>
> > > > > > > > >> >>   JDK 8u60, thereby enabling JDK 8 to consume
> > multi-version
> > > > >
> > > > > JARs.
> > > > >
> > > > > > > For
> > > > > > >
> > > > > > > > >> >>   a
> > > > > > > > >> >>
> > > > > > > > >> >> detailed discussion,
> > > > > > > > >> >>
> > > > > > > > >> >>   please see the corresponding thread on the
> > core-libs-dev
> > > > >
> > > > > mailing
> > > > >
> > > > > > > > >> >>   list.
> > > > > > > > >> >>   [1]
> > > > > > > > >> >>
> > > > > > > > >> >>   Please keep in mind that a JEP in the Candidate state
> > is
> > > > >
> > > > > merely
> > > > >
> > > > > > > an
> > > > > > >
> > > > > > > > >> >>   idea
> > > > > > > > >> >>
> > > > > > > > >> >> worthy of consideration
> > > > > > > > >> >>
> > > > > > > > >> >>   by JDK Release Projects and related efforts; there is
> > no
> > > > > > >
> > > > > > > commitment
> > > > > > >
> > > > > > > > >> >>   that
> > > > > > > > >> >>
> > > > > > > > >> >> it will be delivered in
> > > > > > > > >> >>
> > > > > > > > >> >>   any particular release.
> > > > > > > > >> >>
> > > > > > > > >> >>   Comments, questions, and suggestions are welcome on
> the
> > > > > > >
> > > > > > > corelibs-dev
> > > > > > >
> > > > > > > > >> >> mailing list. (If you
> > > > > > > > >> >>
> > > > > > > > >> >>   haven’t already subscribed to that list then please
> do
> > so
> > > > >
> > > > > first,
> > > > >
> > > > > > > > >> >> otherwise your message will be
> > > > > > > > >> >>
> > > > > > > > >> >>   discarded as spam.)
> > > > > > > > >> >>
> > > > > > > > >> >>   [0] http://openjdk.java.net/jeps/238
> > > > > > > > >> >>   [1]
> > > >
> > > >
> http://mail.openjdk.java.net/pipermail/core-libs-dev/2015-February/031
> > > >
> > > > > > > > >> >> 461
> > > > > > > > >> >> .ht ml
> > > > > > > > >> >>
> > > > > > > > >> >> ---
> > > > > > > > >> >>
> > > > > > > > >> >> IIUC the original request was to have different version
> > of
> > > >
> > > > the
> > > >
> > > > > > > > >> >> same
> > > > > > > > >> >> class
> > > > > > > > >> >> within the same artifact. On the mailinglist I noticed
> a
> > > > > > > > >> >> more
> > > > > > > > >> >> interesting
> > > > > > > > >> >> idea: you need a mechanism to map Classes, Methods or
> > Fields
> > > > >
> > > > > from
> > > > >
> > > > > > > one
> > > > > > >
> > > > > > > > >> >> version to the other.
> > > > > > > > >> >>
> > > > > > > > >> >>  From a Maven perspective I don't see that much issues
> > with
> > > >
> > > > the
> > > >
> > > > > > > > >> >>  original
> > > > > > > > >> >>
> > > > > > > > >> >> idea. You should already be able to do it right now
> with
> > a
> > > >
> > > > lot
> > > >
> > > > > of
> > > > >
> > > > > > > > >> >> execution-blocks.
> > > > > > > > >> >> However, I don't see how users would maintain different
> > > > >
> > > > > version of
> > > > >
> > > > > > > the
> > > > > > >
> > > > > > > > >> >> same class (within an IDE).
> > > > > > > > >> >> To me this all looks quite complex for rare cases.
> > > > > > > > >> >> If you really want multiple JDK versions of the same
> > > >
> > > > artifact,
> > > >
> > > > > I
> > > > >
> > > > > > > would
> > > > > > >
> > > > > > > > >> >> probably split them into classified artifacts.
> > > > > > > > >> >>
> > > > > > > > >> >> Any other comments?
> > > > > > > > >> >>
> > > > > > > > >> >> thanks,
> > > > > > > > >> >> Robert
> > > > > > >
> > > > > > >
> > --------------------------------------------------------------------
> > > > > > > -
> > > > > > >
> > > > > > > > >> >> To unsubscribe, e-mail:
> dev-unsubscr...@maven.apache.org
> > > > > > > > >> >> For additional commands, e-mail:
> > dev-h...@maven.apache.org
> > > > > > >
> > > > > > >
> > --------------------------------------------------------------------
> > > > > > > -
> > > > > > >
> > > > > > > > >> > To unsubscribe, e-mail:
> dev-unsubscr...@maven.apache.org
> > > > > > > > >> > For additional commands, e-mail:
> > dev-h...@maven.apache.org
> > > > >
> > > > >
> ---------------------------------------------------------------------
> > > > >
> > > > > > > > >> To unsubscribe, e-mail: dev-unsubscr...@maven.apache.org
> > > > > > > > >> For additional commands, e-mail:
> dev-h...@maven.apache.org
> > > > >
> > > > >
> ---------------------------------------------------------------------
> > > > >
> > > > > > > > > To unsubscribe, e-mail: dev-unsubscr...@maven.apache.org
> > > > > > > > > For additional commands, e-mail: dev-h...@maven.apache.org
> > > >
> > > > ---------------------------------------------------------------------
> > > >
> > > > > > > > To unsubscribe, e-mail: dev-unsubscr...@maven.apache.org
> > > > > > > > For additional commands, e-mail: dev-h...@maven.apache.org
> > > > > > >
> > > > > > >
> > --------------------------------------------------------------------
> > > > > > > -
> > > > > > > To unsubscribe, e-mail: dev-unsubscr...@maven.apache.org
> > > > > > > For additional commands, e-mail: dev-h...@maven.apache.org
> > > > >
> > > > >
> ---------------------------------------------------------------------
> > > > > To unsubscribe, e-mail: dev-unsubscr...@maven.apache.org
> > > > > For additional commands, e-mail: dev-h...@maven.apache.org
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: dev-unsubscr...@maven.apache.org
> > For additional commands, e-mail: dev-h...@maven.apache.org
> >
> >
>
>
> --
> -----
> Arnaud Héritier
> http://aheritier.net
> Mail/GTalk: aheritier AT gmail DOT com
> Twitter/Skype : aheritier
>



-- 
Jeff MAURY


"Legacy code" often differs from its suggested alternative by actually
working and scaling.
 - Bjarne Stroustrup

http://www.jeffmaury.com
http://riadiscuss.jeffmaury.com
http://www.twitter.com/jeffmaury

Reply via email to