Skip to content

Commit dc72dd0

Browse files
Use the shadow plugin to shade Jetty
This allows clients that have not migrated onto Jetty 12 yet to use Tempest after the AWS DynamoDB Local upgrade Changes: * Upgrade gradle to v8.13 (required for shadow plugin) * Add the `tempest-dynamodb-local` subproject to manage the AWS DynamoDB Local dependency * Manually manage the transitive dependencies of AWS DynamoDB Local to prevent unexpected modules from being shaded * Use the shadow plugin to shade and relocate Kotlin Stdlib, Jetty, Jackson, and AWS DynamoDB Local
1 parent f8f94b6 commit dc72dd0

File tree

10 files changed

+118
-20
lines changed

10 files changed

+118
-20
lines changed
File renamed without changes.

bin/gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
.gradle-7.6.1.pkg
1+
.gradle-8.13.pkg

build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ buildscript {
1717
classpath(libs.junitGradlePlugin)
1818
classpath(libs.kotlinGradlePlugin)
1919
classpath(libs.mavenPublishGradlePlugin)
20+
classpath(libs.shadowGradlePlugin)
2021
classpath(libs.wireGradlePlugin)
2122
}
2223
}

gradle/libs.versions.toml

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,32 @@
11
[versions]
2+
aws2 = "2.31.30"
3+
jackson = "2.14.3"
4+
jetty = "12.0.9"
25
ktlint = "0.40.0"
36
kotlin = "1.9.23"
7+
sqlite4java = "1.0.392"
48

59
[libraries]
10+
antlr4Runtime = { module = "org.antlr:antlr4-runtime", version = "4.13.2" }
611
assertj = { module = "org.assertj:assertj-core", version = "3.23.1" }
7-
aws2Dynamodb = { module = "software.amazon.awssdk:dynamodb", version = "2.25.11" }
8-
aws2DynamodbEnhanced = { module = "software.amazon.awssdk:dynamodb-enhanced", version = "2.25.11" }
9-
awsDynamodb = { module = "com.amazonaws:aws-java-sdk-dynamodb", version = "1.11.960" }
12+
aws2Dynamodb = { module = "software.amazon.awssdk:dynamodb", version.ref = "aws2" }
13+
aws2DynamodbEnhanced = { module = "software.amazon.awssdk:dynamodb-enhanced", version.ref = "aws2" }
14+
aws2Pinpoint = { module = "software.amazon.awssdk:pinpoint", version.ref = "aws2" } # for DynamoDBLocal
15+
awsDynamodb = { module = "com.amazonaws:aws-java-sdk-dynamodb", version = "1.12.782" }
1016
awsDynamodbLocal = { module = "com.amazonaws:DynamoDBLocal", version = "2.6.0" }
1117
clikt = { module = "com.github.ajalt:clikt", version = "2.8.0" }
18+
commonsCli = { module = "commons-cli:commons-cli", version = "1.9.0" } # for DynamoDBLocal
19+
commonsLang3 = { module = "org.apache.commons:commons-lang3", version = "3.17.0" } # for DynamoDBLocal
1220
dokkaGradlePlugin = { module = "org.jetbrains.dokka:dokka-gradle-plugin", version = "1.9.20" }
1321
dockerCore = { module = "com.github.docker-java:docker-java-core", version = "3.2.13" }
1422
dockerTransport = { module = "com.github.docker-java:docker-java-transport-httpclient5", version = "3.2.13" }
1523
findbugsJsr305 = { module = "com.google.code.findbugs:jsr305", version = "3.0.2" }
1624
guava = { module = "com.google.guava:guava", version = "31.0.1-jre" }
25+
jacksonDatabind = { module = "com.fasterxml.jackson.core:jackson-databind", version.ref = "jackson" } # for DynamoDBLocal
26+
jacksonDatatypeJsr310 = { module = "com.fasterxml.jackson.datatype:jackson-datatype-jsr310", version.ref = "jackson" } # for DynamoDBLocal
27+
jettyAlpnClient = { module = "org.eclipse.jetty:jetty-alpn-client", version.ref = "jetty" } # for DynamoDBLocal
28+
jettyClient = { module = "org.eclipse.jetty:jetty-client", version.ref = "jetty" } # for DynamoDBLocal
29+
jettyServer = { module = "org.eclipse.jetty:jetty-server", version.ref = "jetty" } # for DynamoDBLocal
1730
junit4Api = { module = "junit:junit", version = "4.13.2" }
1831
junitApi = { module = "org.junit.jupiter:junit-jupiter-api", version = "5.8.2" }
1932
junitEngine = { module = "org.junit.jupiter:junit-jupiter-engine", version = "5.11.4" }
@@ -32,4 +45,16 @@ moshiKotlin = { module = "com.squareup.moshi:moshi-kotlin", version = "1.15.2" }
3245
nettyBom = { module = "io.netty:netty-bom", version = "4.1.79.Final" }
3346
okio = { module = "com.squareup.okio:okio", version = "3.4.0" }
3447
okioFakefilesystem = { module = "com.squareup.okio:okio-fakefilesystem", version = "3.4.0" }
48+
shadowGradlePlugin = { module = "com.gradleup.shadow:shadow-gradle-plugin", version = "8.3.6" }
49+
slf4jApi = { module = "org.slf4j:slf4j-api", version = "2.0.17" } # for DynamoDBLocal
50+
sqlite4javaLinuxI386 = { module = "com.almworks.sqlite4java:libsqlite4java-linux-i386", version.ref = "sqlite4java" } # for DynamoDBLocal
51+
sqlite4javaLinuxAmd64 = { module = "com.almworks.sqlite4java:libsqlite4java-linux-amd64", version.ref = "sqlite4java" } # for DynamoDBLocal
52+
sqlite4javaOsx = { module = "com.almworks.sqlite4java:libsqlite4java-osx", version.ref = "sqlite4java" } # for DynamoDBLocal
53+
sqlite4javaWinX64 = { module = "com.almworks.sqlite4java:sqlite4java-win32-x64", version.ref = "sqlite4java" } # for DynamoDBLocal
54+
sqlite4javaWinX86 = { module = "com.almworks.sqlite4java:sqlite4java-win32-x86", version.ref = "sqlite4java" } # for DynamoDBLocal
3555
wireGradlePlugin = { module = "com.squareup.wire:wire-gradle-plugin", version = "4.8.1" }
56+
57+
[bundles]
58+
jackson = ["jacksonDatabind", "jacksonDatatypeJsr310"]
59+
jetty = ["jettyAlpnClient", "jettyClient", "jettyServer"]
60+
sqlite4java = ["sqlite4javaLinuxI386", "sqlite4javaLinuxAmd64", "sqlite4javaOsx", "sqlite4javaWinX64", "sqlite4javaWinX86"]

settings.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ include("tempest-internal")
22
include("tempest")
33
include("tempest-bom")
44
include("tempest-docker")
5+
include("tempest-dynamodb-local")
56
include("tempest-testing")
67
include("tempest-testing-internal")
78
include("tempest-testing-docker")
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
import com.vanniktech.maven.publish.JavaLibrary
2+
import com.vanniktech.maven.publish.JavadocJar
3+
import com.vanniktech.maven.publish.MavenPublishBaseExtension
4+
5+
plugins {
6+
`java-library`
7+
id("com.gradleup.shadow")
8+
id("com.vanniktech.maven.publish.base")
9+
}
10+
11+
dependencies {
12+
// Ignore transtive dependencies and insyead manage explicitly.
13+
implementation(libs.awsDynamodbLocal) {
14+
isTransitive = false
15+
}
16+
17+
// Implementation dependencies will be shaded in the JAR.
18+
implementation(libs.bundles.jackson)
19+
implementation(libs.bundles.jetty)
20+
implementation(libs.kotlinStdLib)
21+
22+
// Shadow dependencies will not be shaded.
23+
shadow(libs.antlr4Runtime)
24+
shadow(libs.aws2Dynamodb)
25+
shadow(libs.aws2DynamodbEnhanced)
26+
shadow(libs.aws2Pinpoint)
27+
shadow(libs.awsDynamodb)
28+
shadow(libs.commonsCli)
29+
shadow(libs.commonsLang3)
30+
shadow(libs.guava)
31+
shadow(libs.slf4jApi)
32+
shadow(libs.bundles.sqlite4java)
33+
}
34+
35+
tasks.shadowJar {
36+
// Dependencies to be shaded must be explicitly included as dependencies.
37+
dependencies {
38+
include(dependency("com.amazonaws:DynamoDBLocal"))
39+
include(dependency("com.fasterxml.jackson.core:.*"))
40+
include(dependency("com.fasterxml.jackson.dataformat:.*"))
41+
include(dependency("com.fasterxml.jackson.datatype:.*"))
42+
include(dependency("com.fasterxml.jackson.module:.*"))
43+
include(dependency("org.eclipse.jetty:.*"))
44+
}
45+
46+
// Relocate packages to avoid conflicts.
47+
relocate("com.amazon.dynamodb.grammar", "shaded.com.amazon.dynamodb.grammar")
48+
relocate("com.amazon.ion", "shaded.com.amazon.ion")
49+
relocate("com.amazonaws.services.dynamodbv2.dataMembers", "shaded.com.amazonaws.services.dynamodbv2.dataMembers")
50+
relocate("com.amazonaws.services.dynamodbv2.datamodel", "shaded.com.amazonaws.services.dynamodbv2.datamodel")
51+
relocate("com.amazonaws.services.dynamodbv2.dbenv", "shaded.com.amazonaws.services.dynamodbv2.dbenv")
52+
relocate("com.amazonaws.services.dynamodbv2.exceptions", "shaded.com.amazonaws.services.dynamodbv2.exceptions")
53+
relocate("com.amazonaws.services.dynamodbv2.local", "shaded.com.amazonaws.services.dynamodbv2.local")
54+
relocate("com.fasterxml.jackson", "shaded.com.fasterxml.jackson")
55+
relocate("ddb.partiql", "shaded.ddb.partiql")
56+
relocate("kotlin", "shaded.kotlin")
57+
relocate("org.eclipse.jetty", "shaded.org.eclipse.jetty")
58+
relocate("org.partiql", "shaded.org.partiql")
59+
60+
mergeServiceFiles()
61+
62+
// Publish shadow JAR as the main JAR.
63+
archiveClassifier = ""
64+
}
65+
66+
configure<MavenPublishBaseExtension> {
67+
configure(
68+
JavaLibrary(
69+
javadocJar = JavadocJar.Empty(),
70+
sourcesJar = false,
71+
)
72+
)
73+
}

tempest-testing-jvm/build.gradle.kts

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,20 @@ import com.vanniktech.maven.publish.KotlinJvm
33
import com.vanniktech.maven.publish.MavenPublishBaseExtension
44

55
plugins {
6-
kotlin("jvm")
7-
`java-library`
6+
kotlin("jvm")
7+
`java-library`
88
id("com.vanniktech.maven.publish.base")
99
}
1010

1111
dependencies {
12-
api(project(":tempest-testing"))
13-
implementation(project(":tempest-testing-internal"))
14-
implementation(libs.awsDynamodbLocal)
15-
implementation(libs.kotlinStdLib)
12+
api(project(":tempest-testing"))
13+
implementation(project(":tempest-testing-internal"))
14+
implementation(project(path = ":tempest-dynamodb-local", configuration = "shadow"))
15+
implementation(libs.kotlinStdLib)
1616

17-
testImplementation(libs.assertj)
18-
testImplementation(libs.junitApi)
19-
testImplementation(libs.junitEngine)
17+
testImplementation(libs.assertj)
18+
testImplementation(libs.junitApi)
19+
testImplementation(libs.junitEngine)
2020
}
2121

2222

tempest-testing-jvm/src/main/kotlin/app/cash/tempest/testing/JvmDynamoDbServer.kt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,9 @@
1616

1717
package app.cash.tempest.testing
1818

19-
import com.amazonaws.services.dynamodbv2.local.main.ServerRunner
20-
import com.amazonaws.services.dynamodbv2.local.server.DynamoDBProxyServer
19+
import shaded.com.amazonaws.services.dynamodbv2.local.main.ServerRunner
20+
import shaded.com.amazonaws.services.dynamodbv2.local.server.DynamoDBProxyServer
2121
import com.google.common.util.concurrent.AbstractIdleService
22-
import java.io.File
2322

2423
class JvmDynamoDbServer private constructor(
2524
override val port: Int,

tempest2-testing-jvm/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ plugins {
1111
dependencies {
1212
api(project(":tempest2-testing"))
1313
implementation(project(":tempest2-testing-internal"))
14-
implementation(libs.awsDynamodbLocal)
14+
implementation(project(path = ":tempest-dynamodb-local", configuration = "shadow"))
1515
implementation(libs.kotlinStdLib)
1616

1717
testImplementation(libs.assertj)

tempest2-testing-jvm/src/main/kotlin/app/cash/tempest2/testing/JvmDynamoDbServer.kt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,9 @@
1616

1717
package app.cash.tempest2.testing
1818

19-
import com.amazonaws.services.dynamodbv2.local.main.ServerRunner
20-
import com.amazonaws.services.dynamodbv2.local.server.DynamoDBProxyServer
19+
import shaded.com.amazonaws.services.dynamodbv2.local.main.ServerRunner
20+
import shaded.com.amazonaws.services.dynamodbv2.local.server.DynamoDBProxyServer
2121
import com.google.common.util.concurrent.AbstractIdleService
22-
import java.io.File
2322

2423
class JvmDynamoDbServer private constructor(
2524
override val port: Int,

0 commit comments

Comments
 (0)