Revised proposal for #AutomaticModuleNames
Nicolai Parlog
nipa at codefx.org
Fri May 12 17:48:28 UTC 2017
Hi Stephen,
the shim only works partially. Qualified exports/opens for example
will not get past it. I did not yet investigate further to see whether
other problems occur.
However much we try module names will never be 100% stable and
providing an aliasing mechanism would solve this as well as other
problems (e.g. dropping in a replacement). But maybe that's something
for Java 9.1 or 10. ;)
so long ... Nicolai
On 12.05.2017 17:23, Stephen Colebourne wrote:
> On 5 May 2017 at 15:41, <mark.reinhold at oracle.com> wrote:
>> I suspect what you really mean is "Never publish JARs that refer
>> to automatic modules that do not have `Automatic-Module-Name`
>> attributes". In general that's good advice. It might even be
>> reasonable for managers of artifact repositories to insist upon
>> it, although I now understand that that could be problematic for
>> a repository as popular as Maven Central.
>
> I think this is the tricky part. Lets review where we are.
>
> Firstly, we now have super-package reverse-DNS names and MANIFEST
> entries. Both of these are a very good thing.
>
> Secondly, a module with a module-info can now depend on three
> things: - an explicit module with a module-info (good) - an
> automatic module with MANIFEST entry (good) - an automatic module
> with name implied from filename (not good)
>
> Thirdly, given the nature of Maven Central, it is not realistic to
> prevent modules with dependencies on names implied from filenames
> getting into Central.
>
> My remaining concerns with automatic modules are primarily about
> this last point - we have to accept that there will be modules with
> "bad dependencies" in Maven Central. For example, the graph will
> end up with a dependency on "guava" that breaks when Guava is
> properly modularized and uses "com.google.common" as the module
> name. The result is a graph that does not resolve. While I and
> others will try and communicate this issue to the community, I
> would prefer that the issue simply could not occur.
>
>
> However, it has been pointed out to me off-list that there is a way
> to workaround the name change that I had not fully appreciated
> before.
>
> Given this broken module graph state:
>
> module com.foo.application { requires guava; } module
> com.google.common { }
>
> it is possible to fix it by introducing an additional module as
> follows:
>
> module guava { requires transient com.google.common; }
>
> With this additional "renaming shim module" in the graph,
> everything now works again.
>
> Given that there is a potential workaround, I am not as concerned
> as I previously was about this issue.
>
>
> Ideally, the creation of this "renaming shim module" should be part
> of the JDK (effectively it is a kind of alias, and the JDK is best
> placed to manage this). However, it should also be possible for
> tools like Maven to provide the shim dynamically when needed. It
> would even be possible to release such a shim module to Maven
> Central and depend on it in the usual way.
>
> While this is still a workaround to an issue I wish didn't exist
> in the first place, it is a viable solution that I think allows
> automatic modules to proceed as is (given the JSR/release timeline
> pressure).
>
> Stephen
>
--
PGP Key:
http://keys.gnupg.net/pks/lookup?op=vindex&search=0xCA3BAD2E9CCCD509
Web:
http://codefx.org
a blog about software development
https://www.sitepoint.com/java
high-quality Java/JVM content
http://do-foss.de
Free and Open Source Software for the City of Dortmund
Twitter:
https://twitter.com/nipafx
More information about the jigsaw-dev
mailing list