[jira] [Updated] (MSHADE-453) Relocation hangs indefinitely in all releases > 3.2.2 with basepom
[ 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
[ 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
[ 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
[ 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