[ 
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)

Reply via email to