[jira] [Updated] (MSHADE-453) Relocation hangs indefinitely in all releases > 3.2.2 with basepom

2024-02-18 Thread Elliotte Rusty Harold (Jira)


 [ 
https://issues.apache.org/jira/browse/MSHADE-453?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Elliotte Rusty Harold updated MSHADE-453:
-
Priority: Critical  (was: Major)

> Relocation hangs indefinitely in all releases > 3.2.2 with basepom
> --
>
> Key: MSHADE-453
> URL: https://issues.apache.org/jira/browse/MSHADE-453
> Project: Maven Shade Plugin
>  Issue Type: Bug
>Affects Versions: 3.2.3, 3.2.4, 3.3.0, 3.4.0, 3.5.0
> Environment: Maven home: /Users/jkebinger/Downloads/apache-maven-3.9.3
> Java version: 17.0.1, vendor: BellSoft, runtime: 
> /Users/jkebinger/.asdf/installs/java/liberica-17.0.1+12
> Default locale: en_US, platform encoding: UTF-8
> OS name: "mac os x", version: "13.4.1", arch: "aarch64", family: "mac"
>Reporter: James Kebinger
>Priority: Critical
>
> TL;DR - relocation code in CollectingManifestResourceTransformer, 
> ManifestResourceTransformer don't cope well when the shaded package name 
> includes the original package name. The 
> [docs|https://maven.apache.org/plugins/maven-shade-plugin/shade-mojo.html#relocations]
>  on relocations include such an example
> ---
> I'm relocating some packages in a project and have found that all the newest 
> versions of the shading plugin appear to hang after printing the list of 
> artifacts to include/exclude.
> {{Doing a thread dump shows all the time spent in SimpleRelocator and regex 
> classes}}
> {code:java}
> "main" #1 [10243] prio=5 os_prio=31 cpu=72973.77ms elapsed=81.89s 
> tid=0x00014f00d200 nid=10243 runnable [0x00016dbf1000]
> java.lang.Thread.State: RUNNABLE
> at java.util.regex.Pattern$Start.match(java.base@19.0.2/Pattern.java:3627)
> at java.util.regex.Matcher.search(java.base@19.0.2/Matcher.java:1728)
> at java.util.regex.Matcher.find(java.base@19.0.2/Matcher.java:745)
> at java.util.regex.Matcher.replaceFirst(java.base@19.0.2/Matcher.java:1404)
> at java.lang.String.replaceFirst(java.base@19.0.2/String.java:2906)
> at 
> org.apache.maven.plugins.shade.relocation.SimpleRelocator.relocateClass(SimpleRelocator.java:245)
> at 
> org.basepom.maven.shade.CollectingManifestResourceTransformer.relocate(CollectingManifestResourceTransformer.java:202)
> at 
> org.basepom.maven.shade.CollectingManifestResourceTransformer.processResource(CollectingManifestResourceTransformer.java:116)
> at 
> org.apache.maven.plugins.shade.DefaultShader.goThroughAllJarEntriesForManifestTransformer(DefaultShader.java:364)
> at org.apache.maven.plugins.shade.DefaultShader.shade(DefaultShader.java:122)
> at org.apache.maven.plugins.shade.mojo.ShadeMojo.execute(ShadeMojo.java:500)
> at 
> org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:126)
> at 
> org.apache.maven.lifecycle.internal.MojoExecutor.doExecute2(MojoExecutor.java:342)
> at 
> org.apache.maven.lifecycle.internal.MojoExecutor.doExecute(MojoExecutor.java:330)
> at 
> org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:213)
> at 
> org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:175)
> at 
> org.apache.maven.lifecycle.internal.MojoExecutor.access$000(MojoExecutor.java:76)
> at 
> org.apache.maven.lifecycle.internal.MojoExecutor$1.run(MojoExecutor.java:163){code}
> {{ }}
> Can reproduce against this sample project 
> [https://github.com/prefab-cloud/mvn-shade-test]
>  
> Have only tested on an Apple silicon Mac
>  
> It appears to be repeatedly transforming the clazz variable in this method in 
> SimpleRelocator
> pattern=org.yaml.snakeyaml
> shadedPattern=prefab.shaded.org.yaml.snakeyaml
>  
> {code:java}
> public String relocateClass(String clazz) {
> return rawString ? clazz : clazz.replaceFirst(pattern, shadedPattern);
> }{code}
> So it'll start with eg 
>  
> {code:java}
> org.yaml.snakeyaml;version="1.33",org.yaml.snakeyaml.comments;version="1.33",org.yaml.snakeyaml.composer;version="1.33",org.yaml.snakeyaml.constructor;version="1.33",org.yaml.snakeyaml.emitter;version="1.33",org.yaml.snakeyaml.env;version="1.33",org.yaml.snakeyaml.error;version="1.33",org.yaml.snakeyaml.events;version="1.33",org.yaml.snakeyaml.extensions.compactnotation;version="1.33",org.yaml.snakeyaml.introspector;version="1.33",org.yaml.snakeyaml.nodes;version="1.33",org.yaml.snakeyaml.parser;version="1.33",org.yaml.snakeyaml.reader;version="1.33",org.yaml.snakeyaml.representer;version="1.33",org.yaml.snakeyaml.resolver;version="1.33",org.yaml.snakeyaml.scanner;version="1.33",org.yaml.snakeyaml.serializer;version="1.33",org.yaml.snakeyaml.tokens;version="1.33",org.yaml.snakeyaml.util;version="1.33"
>  
> {code}
> and keep substituting the shaded pattern to build longer and longer string eg 
>  
> prefab.shaded.prefab.shaded.prefab.shaded.prefab.shaded.prefab.shaded.prefab.shaded.prefab.shaded.prefab.s

[jira] [Updated] (MSHADE-453) Relocation hangs indefinitely in all releases > 3.2.2 with basepom

2023-07-31 Thread James Kebinger (Jira)


 [ 
https://issues.apache.org/jira/browse/MSHADE-453?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

James Kebinger updated MSHADE-453:
--
Description: 
TL;DR - relocation code in CollectingManifestResourceTransformer, 
ManifestResourceTransformer don't cope well when the shaded package name 
includes the original package name. The 
[docs|https://maven.apache.org/plugins/maven-shade-plugin/shade-mojo.html#relocations]
 on relocations include such an example

---

I'm relocating some packages in a project and have found that all the newest 
versions of the shading plugin appear to hang after printing the list of 
artifacts to include/exclude.

{{Doing a thread dump shows all the time spent in SimpleRelocator and regex 
classes}}
{code:java}
"main" #1 [10243] prio=5 os_prio=31 cpu=72973.77ms elapsed=81.89s 
tid=0x00014f00d200 nid=10243 runnable [0x00016dbf1000]
java.lang.Thread.State: RUNNABLE
at java.util.regex.Pattern$Start.match(java.base@19.0.2/Pattern.java:3627)
at java.util.regex.Matcher.search(java.base@19.0.2/Matcher.java:1728)
at java.util.regex.Matcher.find(java.base@19.0.2/Matcher.java:745)
at java.util.regex.Matcher.replaceFirst(java.base@19.0.2/Matcher.java:1404)
at java.lang.String.replaceFirst(java.base@19.0.2/String.java:2906)
at 
org.apache.maven.plugins.shade.relocation.SimpleRelocator.relocateClass(SimpleRelocator.java:245)
at 
org.basepom.maven.shade.CollectingManifestResourceTransformer.relocate(CollectingManifestResourceTransformer.java:202)
at 
org.basepom.maven.shade.CollectingManifestResourceTransformer.processResource(CollectingManifestResourceTransformer.java:116)
at 
org.apache.maven.plugins.shade.DefaultShader.goThroughAllJarEntriesForManifestTransformer(DefaultShader.java:364)
at org.apache.maven.plugins.shade.DefaultShader.shade(DefaultShader.java:122)
at org.apache.maven.plugins.shade.mojo.ShadeMojo.execute(ShadeMojo.java:500)
at 
org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:126)
at 
org.apache.maven.lifecycle.internal.MojoExecutor.doExecute2(MojoExecutor.java:342)
at 
org.apache.maven.lifecycle.internal.MojoExecutor.doExecute(MojoExecutor.java:330)
at 
org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:213)
at 
org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:175)
at 
org.apache.maven.lifecycle.internal.MojoExecutor.access$000(MojoExecutor.java:76)
at 
org.apache.maven.lifecycle.internal.MojoExecutor$1.run(MojoExecutor.java:163){code}
{{ }}

Can reproduce against this sample project 
[https://github.com/prefab-cloud/mvn-shade-test]

 

Have only tested on an Apple silicon Mac

 

It appears to be repeatedly transforming the clazz variable in this method in 
SimpleRelocator

pattern=org.yaml.snakeyaml

shadedPattern=prefab.shaded.org.yaml.snakeyaml

 
{code:java}
public String relocateClass(String clazz) {
return rawString ? clazz : clazz.replaceFirst(pattern, shadedPattern);
}{code}
So it'll start with eg 

 
{code:java}
org.yaml.snakeyaml;version="1.33",org.yaml.snakeyaml.comments;version="1.33",org.yaml.snakeyaml.composer;version="1.33",org.yaml.snakeyaml.constructor;version="1.33",org.yaml.snakeyaml.emitter;version="1.33",org.yaml.snakeyaml.env;version="1.33",org.yaml.snakeyaml.error;version="1.33",org.yaml.snakeyaml.events;version="1.33",org.yaml.snakeyaml.extensions.compactnotation;version="1.33",org.yaml.snakeyaml.introspector;version="1.33",org.yaml.snakeyaml.nodes;version="1.33",org.yaml.snakeyaml.parser;version="1.33",org.yaml.snakeyaml.reader;version="1.33",org.yaml.snakeyaml.representer;version="1.33",org.yaml.snakeyaml.resolver;version="1.33",org.yaml.snakeyaml.scanner;version="1.33",org.yaml.snakeyaml.serializer;version="1.33",org.yaml.snakeyaml.tokens;version="1.33",org.yaml.snakeyaml.util;version="1.33"
 
{code}
and keep substituting the shaded pattern to build longer and longer string eg 

 
prefab.shaded.prefab.shaded.prefab.shaded.prefab.shaded.prefab.shaded.prefab.shaded.prefab.shaded.prefab.shaded.org.yaml.snakeyaml
 

This appears to be happening under the influence of 
org.basepom.maven.shade.CollectingManifestResourceTransformer which isn't in 
the stack w/o the basepom

 

There's a 
[loop|https://github.com/basepom/basepom-policy/blob/master/src/main/java/org/basepom/maven/shade/CollectingManifestResourceTransformer.java#L196-L207]
  that repeatedly calls the same relocator class until the answer stops 
changing. Workaround is to change the relocated pattern to not contain the 
original pattern eg 

 

This works:

 

com.google.common
prefab.shaded.guava

 
This does not:
 

com.google.common
prefab.shaded.com.google.common


  was:
I'm relocating some packages in a project and have found that all the newest 
versions of the shading plugin appear to hang after printing the list of 
artifacts to include/exclude.

{{Doing a thread dump shows all the time spent in SimpleRelocator and re

[jira] [Updated] (MSHADE-453) Relocation hangs indefinitely in all releases > 3.2.2 with basepom

2023-07-31 Thread James Kebinger (Jira)


 [ 
https://issues.apache.org/jira/browse/MSHADE-453?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

James Kebinger updated MSHADE-453:
--
Description: 
I'm relocating some packages in a project and have found that all the newest 
versions of the shading plugin appear to hang after printing the list of 
artifacts to include/exclude.

{{Doing a thread dump shows all the time spent in SimpleRelocator and regex 
classes}}
{code:java}
"main" #1 [10243] prio=5 os_prio=31 cpu=72973.77ms elapsed=81.89s 
tid=0x00014f00d200 nid=10243 runnable [0x00016dbf1000]
java.lang.Thread.State: RUNNABLE
at java.util.regex.Pattern$Start.match(java.base@19.0.2/Pattern.java:3627)
at java.util.regex.Matcher.search(java.base@19.0.2/Matcher.java:1728)
at java.util.regex.Matcher.find(java.base@19.0.2/Matcher.java:745)
at java.util.regex.Matcher.replaceFirst(java.base@19.0.2/Matcher.java:1404)
at java.lang.String.replaceFirst(java.base@19.0.2/String.java:2906)
at 
org.apache.maven.plugins.shade.relocation.SimpleRelocator.relocateClass(SimpleRelocator.java:245)
at 
org.basepom.maven.shade.CollectingManifestResourceTransformer.relocate(CollectingManifestResourceTransformer.java:202)
at 
org.basepom.maven.shade.CollectingManifestResourceTransformer.processResource(CollectingManifestResourceTransformer.java:116)
at 
org.apache.maven.plugins.shade.DefaultShader.goThroughAllJarEntriesForManifestTransformer(DefaultShader.java:364)
at org.apache.maven.plugins.shade.DefaultShader.shade(DefaultShader.java:122)
at org.apache.maven.plugins.shade.mojo.ShadeMojo.execute(ShadeMojo.java:500)
at 
org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:126)
at 
org.apache.maven.lifecycle.internal.MojoExecutor.doExecute2(MojoExecutor.java:342)
at 
org.apache.maven.lifecycle.internal.MojoExecutor.doExecute(MojoExecutor.java:330)
at 
org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:213)
at 
org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:175)
at 
org.apache.maven.lifecycle.internal.MojoExecutor.access$000(MojoExecutor.java:76)
at 
org.apache.maven.lifecycle.internal.MojoExecutor$1.run(MojoExecutor.java:163){code}
{{ }}

Can reproduce on java 11, 17, 19 against this sample project 
[https://github.com/prefab-cloud/mvn-shade-test]

 

Have only tested on an Apple silicon Mac

 

It appears to be repeatedly transforming the clazz variable in this method in 
SimpleRelocator

pattern=org.yaml.snakeyaml

shadedPattern=prefab.shaded.org.yaml.snakeyaml

 
{code:java}
public String relocateClass(String clazz) {
return rawString ? clazz : clazz.replaceFirst(pattern, shadedPattern);
}{code}
So it'll start with eg 

 
{code:java}
org.yaml.snakeyaml;version="1.33",org.yaml.snakeyaml.comments;version="1.33",org.yaml.snakeyaml.composer;version="1.33",org.yaml.snakeyaml.constructor;version="1.33",org.yaml.snakeyaml.emitter;version="1.33",org.yaml.snakeyaml.env;version="1.33",org.yaml.snakeyaml.error;version="1.33",org.yaml.snakeyaml.events;version="1.33",org.yaml.snakeyaml.extensions.compactnotation;version="1.33",org.yaml.snakeyaml.introspector;version="1.33",org.yaml.snakeyaml.nodes;version="1.33",org.yaml.snakeyaml.parser;version="1.33",org.yaml.snakeyaml.reader;version="1.33",org.yaml.snakeyaml.representer;version="1.33",org.yaml.snakeyaml.resolver;version="1.33",org.yaml.snakeyaml.scanner;version="1.33",org.yaml.snakeyaml.serializer;version="1.33",org.yaml.snakeyaml.tokens;version="1.33",org.yaml.snakeyaml.util;version="1.33"
 
{code}
and keep substituting the shaded pattern to build longer and longer string eg 

 
prefab.shaded.prefab.shaded.prefab.shaded.prefab.shaded.prefab.shaded.prefab.shaded.prefab.shaded.prefab.shaded.org.yaml.snakeyaml
 

This appears to be happening under the influence of 
org.basepom.maven.shade.CollectingManifestResourceTransformer which isn't in 
the stack w/o the basepom

 

There's a 
[loop|https://github.com/basepom/basepom-policy/blob/master/src/main/java/org/basepom/maven/shade/CollectingManifestResourceTransformer.java#L196-L207]
  that repeatedly calls the same relocator class until the answer stops 
changing. Workaround is to change the relocated pattern to not contain the 
original pattern eg 

 

This works:

 

com.google.common
prefab.shaded.guava

 
This does not:
 

com.google.common
prefab.shaded.com.google.common


  was:
I'm relocating some packages in a project and have found that all the newest 
versions of the shading plugin appear to hang after printing the list of 
artifacts to include/exclude.

{{Doing a thread dump shows all the time spent in SimpleRelocator and regex 
classes}}
{code:java}
"main" #1 [10243] prio=5 os_prio=31 cpu=72973.77ms elapsed=81.89s 
tid=0x00014f00d200 nid=10243 runnable [0x00016dbf1000]
java.lang.Thread.State: RUNNABLE
at java.util.regex.Pattern$Start.match(java.base@19.0.2/Pattern.java:3627)
at java.util.regex.Matcher.sear

[jira] [Updated] (MSHADE-453) Relocation hangs indefinitely in all releases > 3.2.2 with basepom

2023-07-31 Thread James Kebinger (Jira)


 [ 
https://issues.apache.org/jira/browse/MSHADE-453?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

James Kebinger updated MSHADE-453:
--
Description: 
I'm relocating some packages in a project and have found that all the newest 
versions of the shading plugin appear to hang after printing the list of 
artifacts to include/exclude.

{{Doing a thread dump shows all the time spent in SimpleRelocator and regex 
classes}}
{code:java}
"main" #1 [10243] prio=5 os_prio=31 cpu=72973.77ms elapsed=81.89s 
tid=0x00014f00d200 nid=10243 runnable [0x00016dbf1000]
java.lang.Thread.State: RUNNABLE
at java.util.regex.Pattern$Start.match(java.base@19.0.2/Pattern.java:3627)
at java.util.regex.Matcher.search(java.base@19.0.2/Matcher.java:1728)
at java.util.regex.Matcher.find(java.base@19.0.2/Matcher.java:745)
at java.util.regex.Matcher.replaceFirst(java.base@19.0.2/Matcher.java:1404)
at java.lang.String.replaceFirst(java.base@19.0.2/String.java:2906)
at 
org.apache.maven.plugins.shade.relocation.SimpleRelocator.relocateClass(SimpleRelocator.java:245)
at 
org.basepom.maven.shade.CollectingManifestResourceTransformer.relocate(CollectingManifestResourceTransformer.java:202)
at 
org.basepom.maven.shade.CollectingManifestResourceTransformer.processResource(CollectingManifestResourceTransformer.java:116)
at 
org.apache.maven.plugins.shade.DefaultShader.goThroughAllJarEntriesForManifestTransformer(DefaultShader.java:364)
at org.apache.maven.plugins.shade.DefaultShader.shade(DefaultShader.java:122)
at org.apache.maven.plugins.shade.mojo.ShadeMojo.execute(ShadeMojo.java:500)
at 
org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:126)
at 
org.apache.maven.lifecycle.internal.MojoExecutor.doExecute2(MojoExecutor.java:342)
at 
org.apache.maven.lifecycle.internal.MojoExecutor.doExecute(MojoExecutor.java:330)
at 
org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:213)
at 
org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:175)
at 
org.apache.maven.lifecycle.internal.MojoExecutor.access$000(MojoExecutor.java:76)
at 
org.apache.maven.lifecycle.internal.MojoExecutor$1.run(MojoExecutor.java:163){code}
{{ }}

Can reproduce on java 11, 17, 19 against this sample project 
https://github.com/prefab-cloud/mvn-shade-test

 

Have only tested on an Apple silicon Mac

 

It appears to be repeatedly transforming the clazz variable in this method in 
SimpleRelocator

pattern=org.yaml.snakeyaml

shadedPattern=prefab.shaded.org.yaml.snakeyaml

 
{code:java}
public String relocateClass(String clazz) {
return rawString ? clazz : clazz.replaceFirst(pattern, shadedPattern);
}{code}
So it'll start with eg 

 
{code:java}
org.yaml.snakeyaml;version="1.33",org.yaml.snakeyaml.comments;version="1.33",org.yaml.snakeyaml.composer;version="1.33",org.yaml.snakeyaml.constructor;version="1.33",org.yaml.snakeyaml.emitter;version="1.33",org.yaml.snakeyaml.env;version="1.33",org.yaml.snakeyaml.error;version="1.33",org.yaml.snakeyaml.events;version="1.33",org.yaml.snakeyaml.extensions.compactnotation;version="1.33",org.yaml.snakeyaml.introspector;version="1.33",org.yaml.snakeyaml.nodes;version="1.33",org.yaml.snakeyaml.parser;version="1.33",org.yaml.snakeyaml.reader;version="1.33",org.yaml.snakeyaml.representer;version="1.33",org.yaml.snakeyaml.resolver;version="1.33",org.yaml.snakeyaml.scanner;version="1.33",org.yaml.snakeyaml.serializer;version="1.33",org.yaml.snakeyaml.tokens;version="1.33",org.yaml.snakeyaml.util;version="1.33"
 
{code}
and keep substituting the shaded pattern to build longer and longer string eg 

 
prefab.shaded.prefab.shaded.prefab.shaded.prefab.shaded.prefab.shaded.prefab.shaded.prefab.shaded.prefab.shaded.org.yaml.snakeyaml
 

This appears to be happening under the influence of 
org.basepom.maven.shade.CollectingManifestResourceTransformer which isn't in 
the stack w/o the basepom

  was:
I'm relocating some packages in a project and have found that all the newest 
versions of the shading plugin appear to hang after printing the list of 
artifacts to include/exclude.

{{Doing a thread dump shows all the time spent in SimpleRelocator and regex 
classes}}
{code:java}
"main" #1 [10243] prio=5 os_prio=31 cpu=72973.77ms elapsed=81.89s 
tid=0x00014f00d200 nid=10243 runnable [0x00016dbf1000]
java.lang.Thread.State: RUNNABLE
at java.util.regex.Pattern$Start.match(java.base@19.0.2/Pattern.java:3627)
at java.util.regex.Matcher.search(java.base@19.0.2/Matcher.java:1728)
at java.util.regex.Matcher.find(java.base@19.0.2/Matcher.java:745)
at java.util.regex.Matcher.replaceFirst(java.base@19.0.2/Matcher.java:1404)
at java.lang.String.replaceFirst(java.base@19.0.2/String.java:2906)
at 
org.apache.maven.plugins.shade.relocation.SimpleRelocator.relocateClass(SimpleRelocator.java:245)
at 
org.basepom.maven.shade.CollectingManifestResourceTransformer.relocate(CollectingManifestResourceTransformer.java