>
> The idea is to not default to group:artifact but to check if the artifact
> starts with a suffix of the group-ID and then skip this. So g=org.hibernate
> a=hibernate-core would become org.hibernate.core and not
> org.hibernate.hibernate.core. This is a neat trick I wished in the past in
> some repository listings as well. However there is room for conflicts:
> org.hibernate:hibernate-util and org.hibernate:util would fold to the same
> module :-( (However it is most likely better to default to the shorter
> version and ask people to specify a longer version in case of conflicts)?


2017-02-17 15:01 GMT+01:00 Brian Fox <bri...@infinity.nu>:

> Hervé: I feel like I don't completely understand the proposal, but I feel
> like we can achieve your intent using the Module-Name simply by defaulting
> it to g:a and building up a good base of new stuff going into Central such
> that when people start using jigsaw, there is a good pattern in place and
> we've hopefully avoided conflicts.
>
> Am I mis-understanding your proposal?
>
> On Thu, Feb 16, 2017 at 8:51 PM, Hervé BOUTEMY <herve.bout...@free.fr>
> wrote:
>
> > tuesday, I was at a Jigsaw presentation from Remi Forax in France, where
> > the
> > fact that nothing was taken into consideration looked something that was
> > happenning (and the recent publication shows that it has happened now)
> >
> > Then Remi and I discussed and looked for ideas on what lighter proposal
> to
> > do
> > for the namespace concern when sharing modules publicly
> >
> > And I proposed a simplified idea that looked promising when we challenged
> > it:
> >     for modules that are to be shared on Maven Central,
> >     handwritten full module name should *start with groupId*
> >
> >
> > applied to the example for Hibernate, this would just say: Hibernate
> > project
> > owns "org.hibernate" module namespace on [Maven] Central since they own
> > org.hibernate groupId
> >
> > Notice: automodules won't give same module names. Automodules are just
> > transient automagic values for temporary local work, not for public
> shared
> > work
> >
> > Notice 2: whatever does not go to [Maven] Central has just other
> > conventions.
> > Knowing the impact of existing [Maven] Central content, people doing
> their
> > local convention will probably "naturally" think at:
> > - immediate compatibility, to be able to consume public artifacts
> > - future compatibility, to be able to later publish a private artifact
> that
> > may be later shared as public artifact
> >
> >
> > I started to share this idea (which is not far from initial proposal:
> just
> > not
> > about automodule names and not using artifactId)  yesterday with Robert:
> > the
> > discussion just started, nobody had time yet to write the proposal down
> and
> > share it with a wider audience
> >
> >
> > WDYT?
> >
> > Regards,
> >
> > Hervé
> >
> > Le jeudi 16 février 2017, 19:56:41 CET Manfred Moser a écrit :
> > > And it looks like they are saying .. just add the groupId (or similar
> > > namespace) to the modulename. A bit like some artifact repeat the
> groupId
> > > in the artifactId to be specific... seems like a wasted opportunity to
> > > define a good usage pattern. The idea of actually supporting same
> module
> > > names for different forks or the same thing is touted as an advantage.
> > > Anybody that ever had to debug something like this will know its not an
> > > advantage at all .. just simply path to troubleshooting nightmares.
> > >
> > > I expected as much but I am still disappointed and see lots of trouble
> > with
> > > this in the future. Maybe it would be good if all Apache project and
> > others
> > > that are going to publish modules start with using the full namespace
> in
> > > the module name. Problem is of course that the examples I saw so far
> all
> > do
> > > NOT do that so we will end up with a mess anyway..
> > >
> > > Manfred
> > >
> > > Brian Fox wrote on 2017-02-16 10:42:
> > > > On Thu, Feb 16, 2017 at 1:38 PM, Igor Fedorenko <i...@ifedorenko.com
> >
> > wrote:
> > > >> Can't we just block auto-named modules from the build? We control
> > > >> dependencies and should be able to look inside and barf if we don't
> > like
> > > >> anything, no?
> > > >
> > > > Yes but this only applies to things that are modularized. The bigger
> > issue
> > > > is all the existing stuff that would be used as automodules...first
> > they
> > > > are already out there and second, there's nothing to see and block.
> > > >
> > > >> I realize this does not set good defaults for non-maven projects, so
> > > >> there will be some friction there, but hopefully maven userbase is
> big
> > > >> enough to create sufficient pressure for non-maven projects to
> provide
> > > >> explicit module names.
> > > >
> > > > That's exactly my point in originally suggesting to leverage the g:a
> by
> > > > default, but we can do exactly the same thing by injecting the
> > Module-Name
> > > > asap to build up the right practices before jigsaw takes off.
> > > >
> > > >> --
> > > >> Regards,
> > > >> Igor
> > > >>
> > > >> On Thu, Feb 16, 2017, at 01:11 PM, Brian Fox wrote:
> > > >> > I generally agree the concerns were mostly ignored. Specifically
> the
> > > >> > dangers in not carefully approaching and setting best practices in
> > the
> > > >> > names, thereby willfully ignoring what happened with NPM.
> > > >> >
> > > >> > The inclusion of the Module-Name metadata is frankly, more than I
> > > >> > expected
> > > >> > we would get. I think this does give us something to work with,
> > first
> > > >> > by
> > > >> > making that defaulted by the Maven plugins and later by enforcing
> in
> > > >> > the
> > > >> > repo as appropriate. Using this correctly could help solve some of
> > my
> > > >> > initial concerns that we weren't appropriately leveraging the
> > > >> > default-effect.
> > > >> >
> > > >> > PS: those of you who aren't sure what this was all about, see
> here:
> > > >> > http://www.sonatype.org/nexus/2017/01/23/advice-for-jigsaw-> >>
> > > >> regarding-auto-modules/
> > > >>
> > > >> > On Thu, Feb 16, 2017 at 12:26 PM, Manfred Moser
> > > >> > <manf...@simpligility.com>
> > > >> >
> > > >> > wrote:
> > > >> > > I just read it all .. sigh. Looks like our concerns got ignored
> > to me
> > > >> > >
> > > >> > > Manfred
> > > >> > >
> > > >> > > Robert Scholte wrote on 2017-02-16 09:23:
> > > >> > > > FYI,
> > > >> > > >
> > > >> > > > Robert
> > > >> > > >
> > > >> > > > ------- Forwarded message -------
> > > >> > > > From: mark.reinh...@oracle.com
> > > >> > > > To: jpms-spec-expe...@openjdk.java.net
> > > >> > > > Cc:
> > > >> > > > Subject: How to name modules, automatic and otherwise
> > > >> > > > Date: Thu, 16 Feb 2017 17:48:27 +0100
> > > >> > > >
> > > >> > > > This note is in reply to the concerns about automatic modules
> > > >> > > > raised
> > > >>
> > > >> by
> > > >>
> > > >> > > > Robert Scholte and Brian Fox [1], and by Stephen Colebourne
> and
> > > >>
> > > >> others
> > > >>
> > > >> > > > [2].  I've collected my conclusions here rather than in
> separate
> > > >>
> > > >> messages
> > > >>
> > > >> > > > because there are several distinct yet intertwined issues.
> > > >> > > >
> > > >> > > > Summary:
> > > >> > > >    - Module names should not include Maven group identifiers,
> > > >> > > >    because
> > > >> > > >
> > > >> > > >      modules are more abstract than the artifacts that define
> > them.
> > > >> > > >
> > > >> > > >    - Module names should use the reverse-domain-name-prefix
> > > >>
> > > >> convention
> > > >>
> > > >> > > >      or, preferably, the project-name-prefix convention.
> > > >> > > >
> > > >> > > >    - We should not abandon automatic modules, since they are a
> > key
> > > >>
> > > >> tool
> > > >>
> > > >> > > >      for migration and adoption.
> > > >> > > >
> > > >> > > >    - We can address the problems of automatic modules with two
> > > >> > > >    fairly
> > > >> > > >
> > > >> > > >      minor technical enhancements.
> > > >> > > >
> > > >> > > > If any of these points strikes you as controversial, please
> read
> > > >> > > > on!
> > > >> > > >
> > > >> > > >                                    * * *
> > > >> > > >
> > > >> > > > Module names should not include Maven group identifiers, as
> > Robert
> > > >> > > > Scholte and Brian Fox suggest [1], even for modules declared
> > > >>
> > > >> explicitly
> > > >>
> > > >> > > > in `module-info.java` files.  Modules in JPMS are a construct
> of
> > > >> > > > the
> > > >>
> > > >> Java
> > > >>
> > > >> > > > programming language, implemented in both the compiler and the
> > > >>
> > > >> virtual
> > > >>
> > > >> > > > machine.  As such, they are more abstract entities than the
> > > >> > > > artifacts
> > > >> > > > that define them.  This distinction is useful, both
> conceptually
> > > >> > > > and
> > > >> > > > practically, hence module names should remain more abstract.
> > > >> > > >
> > > >> > > > This distinction is useful conceptually because it makes it
> > easier,
> > > >>
> > > >> as
> > > >>
> > > >> > > > we read source code, to think clearly about the nature of a
> > module.
> > > >>
> > > >> We
> > > >>
> > > >> > > > can reason about a module's dependences, exports, services,
> and
> > so
> > > >>
> > > >> forth
> > > >>
> > > >> > > > without cluttering our minds with the details of group
> > identifiers
> > > >>
> > > >> and
> > > >>
> > > >> > > > version constraints.  Today, e.g., we can write, and read:
> > > >> > > >      module foo.data {
> > > >> > > >
> > > >> > > >          exports com.bar.foo.data;
> > > >> > > >          requires hibernate.core;
> > > >> > > >          requires hibernate.jcache;
> > > >> > > >          requires hibernate.validator;
> > > >> > > >
> > > >> > > >      }
> > > >> > > >
> > > >> > > > If we were to extend the syntax of module names to include
> group
> > > >> > > > identifiers, and encourage people to use them, then we'd be
> > faced
> > > >>
> > > >> with
> > > >>
> > > >> > > > something much more verbose:
> > > >> > > >      module com.bar:foo.data {
> > > >> > > >
> > > >> > > >          exports com.bar.foo.data;
> > > >> > > >          requires org.hibernate:hibernate.core;
> > > >> > > >          requires org.hibernate:hibernate.jcache;
> > > >> > > >          requires org.hibernate:hibernate.validator;
> > > >> > > >
> > > >> > > >      }
> > > >> > > >
> > > >> > > > Group identifiers make perfect sense in the context of a build
> > > >> > > > system
> > > >> > > > such as Maven, where they bring necessary structure to the
> > names of
> > > >>
> > > >> the
> > > >>
> > > >> > > > millions of artifacts available across different repositories.
> > > >> > > > Such
> > > >> > > > structure is superfluous and distracting in the context of a
> > module
> > > >> > > > system, where the number of relevant modules in any particular
> > > >>
> > > >> situation
> > > >>
> > > >> > > > is more likely to be in the tens, or hundreds, or (rarely)
> > > >> > > > thousands.
> > > >> > > > All else being equal, simpler names are better.
> > > >> > > >
> > > >> > > > At a practical level, the distinction between modules and
> > artifacts
> > > >>
> > > >> is
> > > >>
> > > >> > > > useful because it leaves the entire problem of artifact
> > selection
> > > >> > > > to
> > > >>
> > > >> the
> > > >>
> > > >> > > > build system.  This allows us to switch from one artifact to
> > > >> > > > another
> > > >> > > > simply by editing a `pom.xml` file to adjust a version
> > constraint
> > > >> > > > or
> > > >>
> > > >> a
> > > >>
> > > >> > > > group identifier; if module names included group identifiers
> > then
> > > >>
> > > >> we'd
> > > >>
> > > >> > > > also have to edit the `module-info.java` file.  This
> flexibility
> > > >> > > > can
> > > >>
> > > >> be
> > > >>
> > > >> > > > helpful if, e.g., a project is forked and a new module with
> the
> > > >> > > > same
> > > >>
> > > >> name
> > > >>
> > > >> > > > and artifact identifier is published under a different group
> > > >>
> > > >> identifier.
> > > >>
> > > >> > > > We long ago decided not to do version selection in the module
> > > >> > > > system,
> > > >> > > > which surprised some people but has worked out fairly well.
> We
> > > >>
> > > >> should
> > > >>
> > > >> > > > treat group selection in the same manner.
> > > >> > > >
> > > >> > > > Another practical benefit of the module/artifact distinction
> is
> > > >> > > > that
> > > >>
> > > >> it
> > > >>
> > > >> > > > keeps the module system independent of any particular build
> > system,
> > > >>
> > > >> so
> > > >>
> > > >> > > > that build systems can continue to improve and evolve
> > independently
> > > >>
> > > >> over
> > > >>
> > > >> > > > time.  Maven-style coordinates are the most popular way to
> name
> > > >>
> > > >> artifacts
> > > >>
> > > >> > > > in repositories today, but that might not be true ten years
> from
> > > >>
> > > >> now.  It
> > > >>
> > > >> > > > would be unwise to adopt Maven's naming convention for module
> > names
> > > >>
> > > >> just
> > > >>
> > > >> > > > because it's popular now, and doubly so to bake Maven's
> > > >>
> > > >> group-identifier
> > > >>
> > > >> > > > concept into the Java programming language.
> > > >> > > >
> > > >> > > >                                    * * *
> > > >> > > >
> > > >> > > > If module names don't include group identifiers, then how
> should
> > > >>
> > > >> modules
> > > >>
> > > >> > > > be named?  What advice should we give to someone who's
> creating
> > a
> > > >> > > > new
> > > >> > > > module from scratch, or modularizing an existing component by
> > > >>
> > > >> writing a
> > > >>
> > > >> > > > `module-info.java` file for it?  (Continue to set aside, for
> the
> > > >>
> > > >> moment,
> > > >>
> > > >> > > > the problems of automatic modules.)
> > > >> > > >
> > > >> > > > In structuring any particular space of names we must balance
> (at
> > > >>
> > > >> least)
> > > >>
> > > >> > > > three fundamental tensions: We want names that are long enough
> > to
> > > >> > > > be
> > > >> > > > descriptive, short enough to be memorable, and unique enough
> to
> > > >> > > > avoid
> > > >> > > > needless conflicts.
> > > >> > > >
> > > >> > > > If you control all of the modules upon which your module
> > depends,
> > > >> > > > and
> > > >> > > > all of the modules that depend upon it, then you can of course
> > name
> > > >>
> > > >> your
> > > >>
> > > >> > > > module whatever you want, and change its name at any time.
> If,
> > > >>
> > > >> however,
> > > >>
> > > >> > > > you're going to publish your module for use by others --
> whether
> > > >> > > > just
> > > >> > > > within your own organization or to a global repository such as
> > > >> > > > Maven
> > > >> > > > Central -- then you should take more care.  There are two
> > > >> > > > well-known
> > > >> > > > ways to go about this.
> > > >> > > >
> > > >> > > >    - Choose module names that start with the reversed form of
> an
> > > >>
> > > >> Internet
> > > >>
> > > >> > > >      domain name that you control, or are at least associated
> > with.
> > > >>
> > > >> The
> > > >>
> > > >> > > >      Java Language Specification has long suggested this
> > convention
> > > >>
> > > >> as a
> > > >>
> > > >> > > >      way to minimize conflicts amongst package names, and it
> has
> > > >> > > >      been
> > > >> > > >      widely though not universally adopted for that purpose.
> > > >> > > >
> > > >> > > >    - Choose module names that start with the name of your
> > project
> > > >> > > >    or
> > > >> > > >
> > > >> > > >      product.  Module (and package) names that start with
> > reversed
> > > >>
> > > >> domain
> > > >>
> > > >> > > >      names are less likely to conflict but they're
> unnecessarily
> > > >>
> > > >> verbose,
> > > >>
> > > >> > > >      they start with the least-important information (e.g.,
> > `com`,
> > > >>
> > > >> `org`,
> > > >>
> > > >> > > >      or `net`), and they don't read well after exogenous
> changes
> > > >>
> > > >> such as
> > > >>
> > > >> > > >      open-source donations or corporate acquisitions (e.g.,
> > > >>
> > > >> `com.sun.*`).
> > > >>
> > > >> > > > The reversed domain-name approach was sensible in the early
> > days of
> > > >>
> > > >> Java,
> > > >>
> > > >> > > > before we had development tools sophisticated enough to help
> us
> > > >> > > > deal
> > > >>
> > > >> with
> > > >>
> > > >> > > > the occasional conflict.  We have such tools now, so going
> > forward
> > > >>
> > > >> the
> > > >>
> > > >> > > > superior readability of short module and package names that
> > start
> > > >>
> > > >> with
> > > >>
> > > >> > > > project or product names is preferable to the onerous
> verbosity
> > of
> > > >>
> > > >> those
> > > >>
> > > >> > > > that start with reversed domain names.
> > > >> > > >
> > > >> > > > This advice will strike some readers as controversial.  I
> > respect
> > > >>
> > > >> those
> > > >>
> > > >> > > > who will choose, for the sake of tradition or an abundance of
> > > >>
> > > >> caution, to
> > > >>
> > > >> > > > use the reversed domain-name convention for module names and
> > > >>
> > > >> continue to
> > > >>
> > > >> > > > use that convention for package names.  I do know, however, of
> > at
> > > >>
> > > >> least
> > > >>
> > > >> > > > one major, well-known project whose developers intend to adopt
> > the
> > > >> > > > project-name-prefix convention for their module names.
> > > >> > > >
> > > >> > > >                                    * * *
> > > >> > > >
> > > >> > > > If module names don't include group identifiers, then how
> should
> > > >> > >
> > > >> > > automatic
> > > >> > >
> > > >> > > > modules be named?  Or are automatic modules so troublesome
> that
> > we
> > > >>
> > > >> should
> > > >>
> > > >> > > > remove them from the design?
> > > >> > > >
> > > >> > > > To answer the second question first: It would be a tragic
> shame
> > to
> > > >>
> > > >> drop
> > > >>
> > > >> > > > automatic modules, since otherwise top-down migration is
> > impossible
> > > >>
> > > >> if
> > > >>
> > > >> > > > you're not willing to modify artifacts that you don't
> maintain,
> > > >> > > > which
> > > >> > > > most people (quite sensibly) aren't.  Even if you limit your
> > use of
> > > >> > > > automatic modules to closed systems, as Stephen Colebourne
> > suggests
> > > >>
> > > >> [2],
> > > >>
> > > >> > > > they're still of significant value.  Let's see if we can
> rescue
> > > >> > > > them.
> > > >> > > >
> > > >> > > > The present algorithm for naming automatic modules has two
> > problems:
> > > >> > > >    (A) Conflicts are possible across large artifact
> > repositories,
> > > >>
> > > >> since
> > > >>
> > > >> > > >        the name of an automatic module is computed from the
> > name of
> > > >>
> > > >> the
> > > >>
> > > >> > > >        artifact that defines it.  [1]
> > > >> > > >
> > > >> > > >    (B) It's risky to publish a module that `requires` some
> other
> > > >>
> > > >> module
> > > >>
> > > >> > > >        that has not yet been modularized, and hence must be
> > used as
> > > >>
> > > >> an
> > > >>
> > > >> > > >        automatic module.  If the maintainer of that module
> later
> > > >>
> > > >> chooses
> > > >>
> > > >> > > >        an explicit name different from the automatic name then
> > you
> > > >>
> > > >> must
> > > >>
> > > >> > > >        publish a new version of your module with an updated
> > > >>
> > > >> `requires`
> > > >>
> > > >> > > >        directive.  [2]
> > > >> > > >
> > > >> > > > As to (A), yes, conflicts exist, though it's worth observing
> > that
> > > >>
> > > >> many of
> > > >>
> > > >> > > > the conflicts in the Maven Central data are due to
> poorly-chosen
> > > >>
> > > >> artifact
> > > >>
> > > >> > > > names: `parent`, `library`, `core`, and `common` top the list,
> > > >> > > > which
> > > >>
> > > >> then
> > > >>
> > > >> > > > falls off in a long-tail distribution.  When conflicts are
> > detected
> > > >>
> > > >> then
> > > >>
> > > >> > > > build tools can rename artifacts either automatically or,
> > > >>
> > > >> preferably, to
> > > >>
> > > >> > > > user-specified names that map to sensible automatic-module
> > names.
> > > >> > > > If
> > > >> > > > renaming artifacts in the filesystem proves impractical then
> we
> > > >> > > > could
> > > >> > > > extend the syntax of the `--module-path` option to allow a
> > module
> > > >>
> > > >> name
> > > >>
> > > >> > > > to be specified for each specifically-named artifact, though
> > > >> > > > strictly
> > > >> > > > speaking that would be a feature of the JDK rather than JPMS.
> > > >> > > >
> > > >> > > > We can address (B) by enabling the maintainers of existing
> > > >>
> > > >> components to
> > > >>
> > > >> > > > specify the module names that should be given to their
> > components
> > > >>
> > > >> when
> > > >>
> > > >> > > > used as automatic modules, without having to write
> > > >> > > > `module-info.java`
> > > >> > > > files.  This can be done very simply, with a single new
> JAR-file
> > > >>
> > > >> manifest
> > > >>
> > > >> > > > `Module-Name` attribute, as first suggested almost a year ago
> > [3].
> > > >> > > >
> > > >> > > > If we add this one feature then the maintainer of an existing
> > > >>
> > > >> component
> > > >>
> > > >> > > > that, e.g., must still build and run on JDK 7 can choose a
> > module
> > > >>
> > > >> name
> > > >>
> > > >> > > > for that component, record it in the manifest by adding a few
> > lines
> > > >>
> > > >> to
> > > >>
> > > >> > > > the `pom.xml` file, and tell users that they can use it as an
> > > >>
> > > >> automatic
> > > >>
> > > >> > > > module on JDK 9 without fear that the module name will change
> > when
> > > >>
> > > >> the
> > > >>
> > > >> > > > component is properly modularized some years from now.  The
> > actual
> > > >>
> > > >> change
> > > >>
> > > >> > > > to the component is small and low-risk, so it can reasonably
> be
> > > >> > > > done
> > > >>
> > > >> in
> > > >>
> > > >> > > > a patch release.  There's no need to write a
> `module-info.java`
> > > >> > > > file,
> > > >> > > > and in fact doing so may be inadvisable at this point if the
> > > >>
> > > >> component
> > > >>
> > > >> > > > depends on other components that have not yet been given
> module
> > > >>
> > > >> names.
> > > >>
> > > >> > > > This approach for (B) does add one more (optional) step to the
> > > >>
> > > >> migration
> > > >>
> > > >> > > > path, but it will hopefully lead to a larger number of
> > > >>
> > > >> explicitly-named
> > > >>
> > > >> > > > modules in the world -- and in particular in Maven Central --
> > > >> > > > sooner
> > > >> > > > rather than later.
> > > >> > > >
> > > >> > > > - Mark
> > > >> > > >
> > > >> > > >
> > > >> > > > [1]
> > > >> > > > http://mail.openjdk.java.net/pipermail/jpms-spec-experts/
> > > >> > >
> > > >> > > 2017-January/000537.html
> > > >> > >
> > > >> > > > [2]
> > > >> > > > http://mail.openjdk.java.net/pipermail/jigsaw-dev/2017-> >>
> > >
> > > >> > > January/011106.html
> > > >> > >
> > > >> > > > [3]
> > > >> > > > http://openjdk.java.net/projects/jigsaw/spec/issues/#
> > > >> > >
> > > >> > > ModuleNameInManifest
> > > >> > >
> > > >> > > > ------------------------------------------------------------
> > > >>
> > > >> ---------
> > > >>
> > > >> > > > 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
> >
> >
>

Reply via email to