[
https://issues.apache.org/jira/browse/MSHADE-261?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17911766#comment-17911766
]
Tatu Saloranta commented on MSHADE-261:
---------------------------------------
I wish I had found this issue sooner, before wasting hours trying to resolve
the same issue.
It looks like `module-info.class` is dropped if:
# "minimize" enabled (by `MinijarFilter`)
# ... but also, even if not, by `DefaultShader`
and apparently there is no way to opt out. I think it should be possible to
turn off this filtering given that it seems possible to produce working
`module-info.class` (esp. by using Moditect plug-in).
> Shade plugin removes module_info.class from the main module
> -----------------------------------------------------------
>
> Key: MSHADE-261
> URL: https://issues.apache.org/jira/browse/MSHADE-261
> Project: Maven Shade Plugin
> Issue Type: Bug
> Affects Versions: 3.1.0
> Environment: OS X, Java 9+181, Maven 3.5.0
> Reporter: Aleksandar Seovic
> Priority: Major
>
> I've noticed that {{maven-shade-plugin 3.1.0}} removes all
> {{module_info.class}} files from the shaded artifact. In my opinion, this is
> wrong.
> I understand why it makes sense to remove {{module_info}} from the
> dependencies that are included into the final artifact by the {{shade}}
> plugin, but it should not be removed from the main artifact dependencies are
> being shaded into.
> For example, I just had to repackage gRPC Java by creating a project that
> merges several gRPC artifacts ({{grpc-core}}, {{grpc-context}} and
> {{grpc-stub}}) into a single [{{io.grpc}} Java 9
> module|https://github.com/aseovic/io.grpc] in order to address the split
> package issue (both {{grpc-core}} and {{grpc-context}} have classes in the
> {{io.grpc}} package, which makes them unusable as Java 9 modules by default).
> In the process, I've run {{jdeps}} against the original JARs and have created
> a [proper Java 9 module
> descriptor|https://github.com/aseovic/io.grpc/blob/master/src/main/java/module-info.java]
> based on what the original JARs export and require, hoping to create a
> single JAR that can be used correctly as a Java 9 module, as a temporary
> workaround until the root issue of split packages is addressed by the gRPC
> team.
> However, I wasn't able to get {{shade}} plugin to include my
> {{module_info.class}} into the final artifact, no matter what I tried. In the
> end, I downgraded to version 3.0.0, which did what I wanted it to do and left
> my {{module_info}} alone.
> I can also foresee legitimate scenarios where I would want to shade and
> relocate some dependency (ASM, for example) inside my module, but that
> doesn't mean that my {{module_info}} should disappear. Nothing changes with
> regard to my module's encapsulation and requirements just because I've
> embedded ASM into it, other than the fact that the ASM is no longer an
> external dependency.
>
> To summarize, while I agree that merging of different module descriptors is
> not something Maven Shade Plugin should do, and that stripping of module
> descriptors from the artifacts included by the shade plugin probably makes
> most sense, I do believe that a hand-written module descriptor in the main
> artifact should be left alone.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)