Patch: Add ServicesResourceTransformer to the archetypes and samples

Dmitry Timofeev dmitry.timofeiev at gmail.com
Fri Oct 11 14:36:37 UTC 2019


Hi,
I've bumped into this issue in the SBT-JMH project, which includes
Async Profiler and Java Flight Recorder integrations for JMH. I added
declarations of the provided Profiler implementations in this library
so that they are discoverable by JMH through SPI mechanism and can be
used in any JMH benchmark. I also had declarations in a test benchmark
project. The standard JMH maven-shade-plugin configuration resulted in
it silently picking one of them and ignoring the other.

The related PR: https://github.com/ktoso/sbt-jmh/pull/173

The patch (please note it skips jmh-core-benchmarks/pom.xml, but may
be added there for consistency):

# HG changeset patch
# User Dmitry Timofeev <dmitry.timofeiev at gmail.com>
# Date 1570796728 -10800
#      Fri Oct 11 15:25:28 2019 +0300
# Node ID 9a65f383a811d24ff0aeae79937848023a87d2d7
# Parent  99d7b73cf1e355341e835208f95447cc5617481d
Add ServicesResourceTransformer to the archetypes and samples:

Add a services transformer to correctly merge services declarations
in META-INF/services (including Profiler implementations,
used to extend JMH) coming from different JARs to include all
available service implementations.

Without this transformer service implementations coming from all JARs
but one will be lost.

See also: https://maven.apache.org/plugins/maven-shade-plugin/examples/resource-transformers.html#ServicesResourceTransformer

diff -r 99d7b73cf1e3 -r 9a65f383a811
jmh-archetypes/jmh-groovy-benchmark-archetype/src/main/resources/archetype-resources/pom.xml
--- a/jmh-archetypes/jmh-groovy-benchmark-archetype/src/main/resources/archetype-resources/pom.xml
   Fri May 17 10:44:26 2019 -0700
+++ b/jmh-archetypes/jmh-groovy-benchmark-archetype/src/main/resources/archetype-resources/pom.xml
   Fri Oct 11 15:25:28 2019 +0300
@@ -211,6 +211,7 @@
                                 <transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                     <mainClass>org.openjdk.jmh.Main</mainClass>
                                 </transformer>
+                                <transformer
implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
                             </transformers>
                             <filters>
                                 <filter>
diff -r 99d7b73cf1e3 -r 9a65f383a811
jmh-archetypes/jmh-java-benchmark-archetype/src/main/resources/archetype-resources/pom.xml
--- a/jmh-archetypes/jmh-java-benchmark-archetype/src/main/resources/archetype-resources/pom.xml
   Fri May 17 10:44:26 2019 -0700
+++ b/jmh-archetypes/jmh-java-benchmark-archetype/src/main/resources/archetype-resources/pom.xml
   Fri Oct 11 15:25:28 2019 +0300
@@ -106,6 +106,7 @@
                                 <transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                     <mainClass>org.openjdk.jmh.Main</mainClass>
                                 </transformer>
+                                <transformer
implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
                             </transformers>
                             <filters>
                                 <filter>
diff -r 99d7b73cf1e3 -r 9a65f383a811
jmh-archetypes/jmh-kotlin-benchmark-archetype/src/main/resources/archetype-resources/pom.xml
--- a/jmh-archetypes/jmh-kotlin-benchmark-archetype/src/main/resources/archetype-resources/pom.xml
   Fri May 17 10:44:26 2019 -0700
+++ b/jmh-archetypes/jmh-kotlin-benchmark-archetype/src/main/resources/archetype-resources/pom.xml
   Fri Oct 11 15:25:28 2019 +0300
@@ -224,6 +224,7 @@
                                 <transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                     <mainClass>org.openjdk.jmh.Main</mainClass>
                                 </transformer>
+                                <transformer
implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
                             </transformers>
                             <filters>
                                 <filter>
diff -r 99d7b73cf1e3 -r 9a65f383a811
jmh-archetypes/jmh-scala-benchmark-archetype/src/main/resources/archetype-resources/pom.xml
--- a/jmh-archetypes/jmh-scala-benchmark-archetype/src/main/resources/archetype-resources/pom.xml
   Fri May 17 10:44:26 2019 -0700
+++ b/jmh-archetypes/jmh-scala-benchmark-archetype/src/main/resources/archetype-resources/pom.xml
   Fri Oct 11 15:25:28 2019 +0300
@@ -217,6 +217,7 @@
                                 <transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                     <mainClass>org.openjdk.jmh.Main</mainClass>
                                 </transformer>
+                                <transformer
implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
                             </transformers>
                             <filters>
                                 <filter>
diff -r 99d7b73cf1e3 -r 9a65f383a811 jmh-samples/pom.xml
--- a/jmh-samples/pom.xml    Fri May 17 10:44:26 2019 -0700
+++ b/jmh-samples/pom.xml    Fri Oct 11 15:25:28 2019 +0300
@@ -103,6 +103,7 @@

implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                     <mainClass>org.openjdk.jmh.Main</mainClass>
                                 </transformer>
+                                <transformer
implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
                             </transformers>
                         </configuration>
                     </execution>


-- 
Best wishes,
Dmitry Timofeev


More information about the jmh-dev mailing list