Skip to content

Commit 8ac72a7

Browse files
committed
Merge branch 'pr-987' into jackson3-migration
2 parents b45f5ad + 4f6851a commit 8ac72a7

43 files changed

Lines changed: 8809 additions & 8 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/CI.yml

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ jobs:
2828
- 'project/build.properties'
2929
- 'msgpack-core/**'
3030
- 'msgpack-jackson/**'
31+
- 'msgpack-jackson3/**'
3132
docs:
3233
- '**.md'
3334
- '**.txt'
@@ -81,8 +82,18 @@ jobs:
8182
- name: Test
8283
env:
8384
TEST_JAVA_HOME: ${{ steps.target-jdk.outputs.path }}
84-
run: ./sbt test
85+
run: |
86+
if [[ ${{ matrix.java }} -lt 17 ]]; then
87+
./sbt msgpack-core/test msgpack-jackson/test
88+
else
89+
./sbt test
90+
fi
8591
- name: Universal Buffer Test
8692
env:
8793
TEST_JAVA_HOME: ${{ steps.target-jdk.outputs.path }}
88-
run: ./sbt test -J-Dmsgpack.universal-buffer=true
94+
run: |
95+
if [[ ${{ matrix.java }} -lt 17 ]]; then
96+
./sbt msgpack-core/test msgpack-jackson/test -J-Dmsgpack.universal-buffer=true
97+
else
98+
./sbt test -J-Dmsgpack.universal-buffer=true
99+
fi

.github/workflows/release.yml

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,17 @@ jobs:
3838
PGP_PASSPHRASE: ${{ secrets.PGP_PASSPHRASE }}
3939
TEST_JAVA_HOME: ${{ steps.jdk8.outputs.path }}
4040
run: |
41-
./sbt publishSigned
41+
./sbt msgpack-core/publishSigned msgpack-jackson/publishSigned
42+
# msgpack-jackson3 requires JDK 17+
43+
- uses: actions/setup-java@v5
44+
with:
45+
java-version: 17
46+
distribution: temurin
47+
- name: Build bundle for msgpack-jackson3
48+
env:
49+
PGP_PASSPHRASE: ${{ secrets.PGP_PASSPHRASE }}
50+
run: |
51+
./sbt msgpack-jackson3/publishSigned
4252
- name: Release to Sonatype
4353
env:
4454
SONATYPE_USERNAME: '${{ secrets.SONATYPE_USERNAME }}'

README.md

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,16 @@ For using DirectByteBuffer (off-heap memory access methods) in JDK17, you need t
5353

5454
### Integration with Jackson ObjectMapper (jackson-databind)
5555

56-
msgpack-java supports serialization and deserialization of Java objects through [jackson-databind](https://github.com/FasterXML/jackson-databind).
57-
For details, see [msgpack-jackson/README.md](https://github.com/msgpack/msgpack-java/blob/develop/msgpack-jackson/README.md). The template-based serialization mechanism used in v06 is deprecated.
56+
msgpack-java supports serialization and deserialization of Java objects through [jackson-databind](https://github.com/FasterXML/jackson-databind). The template-based serialization mechanism used in v06 is deprecated.
57+
58+
Two artifacts are published depending on which Jackson major version your project uses:
59+
60+
| Jackson version | Artifact | Requirements |
61+
| --- | --- | --- |
62+
| Jackson 2.x | [`jackson-dataformat-msgpack`](https://github.com/msgpack/msgpack-java/blob/develop/msgpack-jackson/README.md) | Java 8+ |
63+
| Jackson 3.x | [`jackson-dataformat-msgpack-jackson3`](https://github.com/msgpack/msgpack-java/blob/develop/msgpack-jackson3/README.md) | Java 17+ |
64+
65+
Use `jackson-dataformat-msgpack` if your project still depends on Jackson 2.x, or `jackson-dataformat-msgpack-jackson3` if you've upgraded to Jackson 3.x. See each module's README for install instructions and usage details.
5866

5967
- [Release Notes](https://github.com/msgpack/msgpack-java/blob/develop/RELEASE_NOTES.md)
6068

build.sbt

Lines changed: 39 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -115,10 +115,18 @@ val buildSettings = Seq[Setting[?]](
115115
Test / compile := Def.uncached((Test / compile).dependsOn(Test / jcheckStyle).value)
116116
)
117117

118-
val junitJupiter = "org.junit.jupiter" % "junit-jupiter" % "5.14.4" % "test"
119-
val junitVintage = "org.junit.vintage" % "junit-vintage-engine" % "5.14.4" % "test"
118+
val junitJupiter = "org.junit.jupiter" % "junit-jupiter" % "5.14.4" % "test"
119+
val junitVintage = "org.junit.vintage" % "junit-vintage-engine" % "5.14.4" % "test"
120+
val junitInterface = "com.github.sbt" % "junit-interface" % "0.13.3" % "test"
120121

121122
// Project settings
123+
val isJava17Plus: Boolean = {
124+
val v = sys.props.getOrElse("java.specification.version", "1.8")
125+
// getOrElse(false): non-numeric versions (e.g. early-access "17-ea") fail safe
126+
// by not compiling the jackson3 module rather than making an optimistic guess.
127+
if (v.startsWith("1.")) false else scala.util.Try(v.toInt >= 17).getOrElse(false)
128+
}
129+
122130
lazy val root = Project(id = "msgpack-java", base = file("."))
123131
.settings(
124132
buildSettings,
@@ -127,7 +135,10 @@ lazy val root = Project(id = "msgpack-java", base = file("."))
127135
publish := {},
128136
publishLocal := {}
129137
)
130-
.aggregate(msgpackCore, msgpackJackson)
138+
.aggregate(
139+
Seq[ProjectReference](msgpackCore, msgpackJackson) ++
140+
(if (isJava17Plus) Seq[ProjectReference](msgpackJackson3) else Nil): _*
141+
)
131142

132143
lazy val msgpackCore = Project(id = "msgpack-core", base = file("msgpack-core"))
133144
.enablePlugins(SbtOsgi)
@@ -188,3 +199,28 @@ lazy val msgpackJackson = Project(id = "msgpack-jackson", base = file("msgpack-j
188199
testOptions += Tests.Argument(TestFrameworks.JUnit, "-v")
189200
)
190201
.dependsOn(msgpackCore)
202+
203+
lazy val msgpackJackson3 = Project(id = "msgpack-jackson3", base = file("msgpack-jackson3"))
204+
.enablePlugins(SbtOsgi, JmhPlugin)
205+
.settings(
206+
buildSettings,
207+
name := "jackson-dataformat-msgpack-jackson3",
208+
description := "Jackson 3.x extension that adds support for MessagePack",
209+
OsgiKeys.bundleSymbolicName := "org.msgpack.msgpack-jackson3",
210+
OsgiKeys.exportPackage := Seq("org.msgpack.jackson", "org.msgpack.jackson.dataformat"),
211+
OsgiKeys.importPackage := Seq("!android.os", "!sun.*"),
212+
Test / fork := true,
213+
javacOptions := Seq("--release", "17"),
214+
doc / javacOptions := Seq("--release", "17", "-Xdoclint:none"),
215+
libraryDependencies ++=
216+
Seq(
217+
"tools.jackson.core" % "jackson-databind" % "3.1.2",
218+
junitInterface
219+
),
220+
testOptions += Tests.Argument(TestFrameworks.JUnit, "-v"),
221+
Jmh / javaOptions ++= Seq(
222+
"--add-opens=java.base/java.nio=ALL-UNNAMED",
223+
"--add-opens=java.base/sun.nio.ch=ALL-UNNAMED"
224+
)
225+
)
226+
.dependsOn(msgpackCore)

0 commit comments

Comments
 (0)