From feee21171a7d5af1957c5e7b62b440f53cf37478 Mon Sep 17 00:00:00 2001 From: Mitsunori Komatsu Date: Wed, 12 Aug 2026 18:05:40 +0900 Subject: [PATCH] Move Jackson 3 JMH benchmarks into a separate unpublished project JmhPlugin adds jmh-core, jmh-generator-bytecode and jmh-generator-reflection to libraryDependencies without a configuration, so enabling it on msgpack-jackson3 published them as compile dependencies of jackson-dataformat-msgpack, inherited by every consumer along with jopt-simple, commons-math3 and ASM. The released org.msgpack:jackson-dataformat-msgpack POM has no such entries. Move src/jmh into msgpack-jackson3-benchmark, which depends on msgpack-jackson3 and is not published. This is also how sbt-jmh recommends laying out benchmarks, since the code generator needs a project of its own. --- build.sbt | 24 +++++++++++++++---- .../dataformat/benchmark/BenchmarkState.java | 0 .../benchmark/MsgpackReadBenchmark.java | 0 .../benchmark/MsgpackWriteBenchmark.java | 0 .../dataformat/benchmark/NopOutputStream.java | 0 .../benchmark/WriteUTF8StringBenchmark.java | 0 .../dataformat/benchmark/model/Image.java | 0 .../benchmark/model/MediaContent.java | 0 .../dataformat/benchmark/model/MediaItem.java | 0 .../benchmark/model/MediaItems.java | 0 .../dataformat/benchmark/model/Player.java | 0 .../dataformat/benchmark/model/Size.java | 0 12 files changed, 20 insertions(+), 4 deletions(-) rename {msgpack-jackson3 => msgpack-jackson3-benchmark}/src/jmh/java/org/msgpack/jackson3/dataformat/benchmark/BenchmarkState.java (100%) rename {msgpack-jackson3 => msgpack-jackson3-benchmark}/src/jmh/java/org/msgpack/jackson3/dataformat/benchmark/MsgpackReadBenchmark.java (100%) rename {msgpack-jackson3 => msgpack-jackson3-benchmark}/src/jmh/java/org/msgpack/jackson3/dataformat/benchmark/MsgpackWriteBenchmark.java (100%) rename {msgpack-jackson3 => msgpack-jackson3-benchmark}/src/jmh/java/org/msgpack/jackson3/dataformat/benchmark/NopOutputStream.java (100%) rename {msgpack-jackson3 => msgpack-jackson3-benchmark}/src/jmh/java/org/msgpack/jackson3/dataformat/benchmark/WriteUTF8StringBenchmark.java (100%) rename {msgpack-jackson3 => msgpack-jackson3-benchmark}/src/jmh/java/org/msgpack/jackson3/dataformat/benchmark/model/Image.java (100%) rename {msgpack-jackson3 => msgpack-jackson3-benchmark}/src/jmh/java/org/msgpack/jackson3/dataformat/benchmark/model/MediaContent.java (100%) rename {msgpack-jackson3 => msgpack-jackson3-benchmark}/src/jmh/java/org/msgpack/jackson3/dataformat/benchmark/model/MediaItem.java (100%) rename {msgpack-jackson3 => msgpack-jackson3-benchmark}/src/jmh/java/org/msgpack/jackson3/dataformat/benchmark/model/MediaItems.java (100%) rename {msgpack-jackson3 => msgpack-jackson3-benchmark}/src/jmh/java/org/msgpack/jackson3/dataformat/benchmark/model/Player.java (100%) rename {msgpack-jackson3 => msgpack-jackson3-benchmark}/src/jmh/java/org/msgpack/jackson3/dataformat/benchmark/model/Size.java (100%) diff --git a/build.sbt b/build.sbt index e1144f67..f54045ac 100644 --- a/build.sbt +++ b/build.sbt @@ -142,7 +142,7 @@ lazy val root = Project(id = "msgpack-java", base = file(".")) .aggregate( Seq[ProjectReference](msgpackCore, msgpackJackson) ++ ( if (isJava17Plus) - Seq[ProjectReference](msgpackJackson3) + Seq[ProjectReference](msgpackJackson3, msgpackJackson3Benchmark) else Nil ): _* @@ -217,7 +217,7 @@ lazy val msgpackJackson = Project(id = "msgpack-jackson", base = file("msgpack-j // and the Java package are renamed together, so this artifact can coexist on the same // classpath with the Jackson 2.x artifact (org.msgpack:jackson-dataformat-msgpack). lazy val msgpackJackson3 = Project(id = "msgpack-jackson3", base = file("msgpack-jackson3")) - .enablePlugins(SbtOsgi, JmhPlugin) + .enablePlugins(SbtOsgi) .settings( buildSettings, organization := "org.msgpack.jackson3", @@ -234,11 +234,27 @@ lazy val msgpackJackson3 = Project(id = "msgpack-jackson3", base = file("msgpack doc / javacOptions := Seq("--release", "17", "-Xdoclint:none"), libraryDependencies ++= Seq("tools.jackson.core" % "jackson-databind" % "3.1.2", junitInterface), - testOptions += Tests.Argument(TestFrameworks.JUnit, "-v"), + testOptions += Tests.Argument(TestFrameworks.JUnit, "-v") + ) + .dependsOn(msgpackCore) + +// JMH benchmarks for the Jackson 3.x module. Kept in a separate, unpublished project as +// sbt-jmh recommends: JmhPlugin adds jmh-core and the code generators to +// libraryDependencies unscoped, so enabling it on a published module would leak them into +// that module's POM as compile dependencies of every consumer. +lazy val msgpackJackson3Benchmark = Project( + id = "msgpack-jackson3-benchmark", + base = file("msgpack-jackson3-benchmark") +).enablePlugins(JmhPlugin) + .settings( + buildSettings, + description := "JMH benchmarks for the Jackson 3.x MessagePack integration", + publish / skip := true, + javacOptions := Seq("--release", "17"), Jmh / javaOptions ++= Seq( "--add-opens=java.base/java.nio=ALL-UNNAMED", "--add-opens=java.base/sun.nio.ch=ALL-UNNAMED" ) ) - .dependsOn(msgpackCore) + .dependsOn(msgpackJackson3) diff --git a/msgpack-jackson3/src/jmh/java/org/msgpack/jackson3/dataformat/benchmark/BenchmarkState.java b/msgpack-jackson3-benchmark/src/jmh/java/org/msgpack/jackson3/dataformat/benchmark/BenchmarkState.java similarity index 100% rename from msgpack-jackson3/src/jmh/java/org/msgpack/jackson3/dataformat/benchmark/BenchmarkState.java rename to msgpack-jackson3-benchmark/src/jmh/java/org/msgpack/jackson3/dataformat/benchmark/BenchmarkState.java diff --git a/msgpack-jackson3/src/jmh/java/org/msgpack/jackson3/dataformat/benchmark/MsgpackReadBenchmark.java b/msgpack-jackson3-benchmark/src/jmh/java/org/msgpack/jackson3/dataformat/benchmark/MsgpackReadBenchmark.java similarity index 100% rename from msgpack-jackson3/src/jmh/java/org/msgpack/jackson3/dataformat/benchmark/MsgpackReadBenchmark.java rename to msgpack-jackson3-benchmark/src/jmh/java/org/msgpack/jackson3/dataformat/benchmark/MsgpackReadBenchmark.java diff --git a/msgpack-jackson3/src/jmh/java/org/msgpack/jackson3/dataformat/benchmark/MsgpackWriteBenchmark.java b/msgpack-jackson3-benchmark/src/jmh/java/org/msgpack/jackson3/dataformat/benchmark/MsgpackWriteBenchmark.java similarity index 100% rename from msgpack-jackson3/src/jmh/java/org/msgpack/jackson3/dataformat/benchmark/MsgpackWriteBenchmark.java rename to msgpack-jackson3-benchmark/src/jmh/java/org/msgpack/jackson3/dataformat/benchmark/MsgpackWriteBenchmark.java diff --git a/msgpack-jackson3/src/jmh/java/org/msgpack/jackson3/dataformat/benchmark/NopOutputStream.java b/msgpack-jackson3-benchmark/src/jmh/java/org/msgpack/jackson3/dataformat/benchmark/NopOutputStream.java similarity index 100% rename from msgpack-jackson3/src/jmh/java/org/msgpack/jackson3/dataformat/benchmark/NopOutputStream.java rename to msgpack-jackson3-benchmark/src/jmh/java/org/msgpack/jackson3/dataformat/benchmark/NopOutputStream.java diff --git a/msgpack-jackson3/src/jmh/java/org/msgpack/jackson3/dataformat/benchmark/WriteUTF8StringBenchmark.java b/msgpack-jackson3-benchmark/src/jmh/java/org/msgpack/jackson3/dataformat/benchmark/WriteUTF8StringBenchmark.java similarity index 100% rename from msgpack-jackson3/src/jmh/java/org/msgpack/jackson3/dataformat/benchmark/WriteUTF8StringBenchmark.java rename to msgpack-jackson3-benchmark/src/jmh/java/org/msgpack/jackson3/dataformat/benchmark/WriteUTF8StringBenchmark.java diff --git a/msgpack-jackson3/src/jmh/java/org/msgpack/jackson3/dataformat/benchmark/model/Image.java b/msgpack-jackson3-benchmark/src/jmh/java/org/msgpack/jackson3/dataformat/benchmark/model/Image.java similarity index 100% rename from msgpack-jackson3/src/jmh/java/org/msgpack/jackson3/dataformat/benchmark/model/Image.java rename to msgpack-jackson3-benchmark/src/jmh/java/org/msgpack/jackson3/dataformat/benchmark/model/Image.java diff --git a/msgpack-jackson3/src/jmh/java/org/msgpack/jackson3/dataformat/benchmark/model/MediaContent.java b/msgpack-jackson3-benchmark/src/jmh/java/org/msgpack/jackson3/dataformat/benchmark/model/MediaContent.java similarity index 100% rename from msgpack-jackson3/src/jmh/java/org/msgpack/jackson3/dataformat/benchmark/model/MediaContent.java rename to msgpack-jackson3-benchmark/src/jmh/java/org/msgpack/jackson3/dataformat/benchmark/model/MediaContent.java diff --git a/msgpack-jackson3/src/jmh/java/org/msgpack/jackson3/dataformat/benchmark/model/MediaItem.java b/msgpack-jackson3-benchmark/src/jmh/java/org/msgpack/jackson3/dataformat/benchmark/model/MediaItem.java similarity index 100% rename from msgpack-jackson3/src/jmh/java/org/msgpack/jackson3/dataformat/benchmark/model/MediaItem.java rename to msgpack-jackson3-benchmark/src/jmh/java/org/msgpack/jackson3/dataformat/benchmark/model/MediaItem.java diff --git a/msgpack-jackson3/src/jmh/java/org/msgpack/jackson3/dataformat/benchmark/model/MediaItems.java b/msgpack-jackson3-benchmark/src/jmh/java/org/msgpack/jackson3/dataformat/benchmark/model/MediaItems.java similarity index 100% rename from msgpack-jackson3/src/jmh/java/org/msgpack/jackson3/dataformat/benchmark/model/MediaItems.java rename to msgpack-jackson3-benchmark/src/jmh/java/org/msgpack/jackson3/dataformat/benchmark/model/MediaItems.java diff --git a/msgpack-jackson3/src/jmh/java/org/msgpack/jackson3/dataformat/benchmark/model/Player.java b/msgpack-jackson3-benchmark/src/jmh/java/org/msgpack/jackson3/dataformat/benchmark/model/Player.java similarity index 100% rename from msgpack-jackson3/src/jmh/java/org/msgpack/jackson3/dataformat/benchmark/model/Player.java rename to msgpack-jackson3-benchmark/src/jmh/java/org/msgpack/jackson3/dataformat/benchmark/model/Player.java diff --git a/msgpack-jackson3/src/jmh/java/org/msgpack/jackson3/dataformat/benchmark/model/Size.java b/msgpack-jackson3-benchmark/src/jmh/java/org/msgpack/jackson3/dataformat/benchmark/model/Size.java similarity index 100% rename from msgpack-jackson3/src/jmh/java/org/msgpack/jackson3/dataformat/benchmark/model/Size.java rename to msgpack-jackson3-benchmark/src/jmh/java/org/msgpack/jackson3/dataformat/benchmark/model/Size.java