From dce203845e72c6586e870173f98f43129d7254e1 Mon Sep 17 00:00:00 2001
From: Adam <897017+aSemy@users.noreply.github.com>
Date: Tue, 6 Jun 2023 00:04:26 +0200
Subject: [PATCH] restructure project to Kotlin Multiplatform
- custom POM location removed (there are now two POMs, one for the 'Kotlin Multiplatform' publication, and another for Kotlin/JVM, and more are on the way, which would lead to a cluttered build dir)
- renamed the directories (the directory name is how Kotlin Multiplatform chooses the published artifact ID, and there's no an easier way to change it.)
- updated README examples, and link to `-jvm` variant guide
---
README.md | 19 +++---
app/pom.xml | 58 -------------------
build.gradle.kts | 4 +-
.../conventions/lang/kotlin-jvm.gradle.kts | 47 ---------------
.../conventions/publishing.gradle.kts | 7 +++
lib/pom.xml | 52 -----------------
lib/pom.xml.asc | 17 ------
settings.gradle.kts | 4 +-
{app => urlencoder-app}/build.gradle.kts | 56 ++++++++----------
{app => urlencoder-app}/detekt-baseline.xml | 0
.../net/thauvin/erik/urlencoder/UrlEncoder.kt | 0
.../thauvin/erik/urlencoder/UrlEncoderTest.kt | 0
{lib => urlencoder-lib}/build.gradle.kts | 38 +++++-------
{lib => urlencoder-lib}/detekt-baseline.xml | 0
.../thauvin/erik/urlencoder/UrlEncoderUtil.kt | 0
.../erik/urlencoder/UrlEncoderUtilTest.kt | 0
16 files changed, 59 insertions(+), 243 deletions(-)
delete mode 100644 app/pom.xml
delete mode 100644 buildSrc/src/main/kotlin/buildsrc/conventions/lang/kotlin-jvm.gradle.kts
delete mode 100644 lib/pom.xml
delete mode 100644 lib/pom.xml.asc
rename {app => urlencoder-app}/build.gradle.kts (70%)
rename {app => urlencoder-app}/detekt-baseline.xml (100%)
rename {app/src/main => urlencoder-app/src/jvmMain}/kotlin/net/thauvin/erik/urlencoder/UrlEncoder.kt (100%)
rename {app/src/test => urlencoder-app/src/jvmTest}/kotlin/net/thauvin/erik/urlencoder/UrlEncoderTest.kt (100%)
rename {lib => urlencoder-lib}/build.gradle.kts (70%)
rename {lib => urlencoder-lib}/detekt-baseline.xml (100%)
rename {lib/src/main => urlencoder-lib/src/jvmMain}/kotlin/net/thauvin/erik/urlencoder/UrlEncoderUtil.kt (100%)
rename {lib/src/test => urlencoder-lib/src/jvmTest}/kotlin/net/thauvin/erik/urlencoder/UrlEncoderUtilTest.kt (100%)
diff --git a/README.md b/README.md
index 95f9d13..18996b5 100644
--- a/README.md
+++ b/README.md
@@ -63,7 +63,7 @@ dependencies {
```
Instructions for using with Maven, Ivy, etc. can be found
-on [Maven Central](https://maven-badges.herokuapp.com/maven-central/net.thauvin.erik/urlencoder).
+on [Maven Central](https://maven-badges.herokuapp.com/maven-central/net.thauvin.erik/urlencoder-jvm).
## Standalone usage
@@ -85,10 +85,10 @@ Encode and decode URL components defensively.
### Running with Gradle
```shell
-./gradlew run --args="-e 'a test &'" # -> a%20test%20%26
-./gradlew run --args="%#okékÉȢ" # -> %25%23ok%C3%A9k%C3%89%C8%A2
+./gradlew run --quiet --args="-e 'a test &'" # -> a%20test%20%26
+./gradlew run --quiet --args="%#okékÉȢ" # -> %25%23ok%C3%A9k%C3%89%C8%A2
-./gradlew run --args="-d 'a%20test%20%26'" # -> a test &
+./gradlew run --quiet --args="-d 'a%20test%20%26'" # -> a test &
```
### Running with Java
@@ -96,23 +96,23 @@ Encode and decode URL components defensively.
First build the jar file:
```shell
-./gradlew clean fatJar
+./gradlew fatJar
```
Then run it:
```shell
-java -jar lib/build/libs/urlencoder-*all.jar -e "a test &" # -> a%20test%20%26
-java -jar lib/build/libs/urlencoder-*all.jar "%#okékÉȢ" # -> %25%23ok%C3%A9k%C3%89%C8%A2
+java -jar urlencoder-app/build/libs/urlencoder-*all.jar -e "a test &" # -> a%20test%20%26
+java -jar urlencoder-app/build/libs/urlencoder-*all.jar "%#okékÉȢ" # -> %25%23ok%C3%A9k%C3%89%C8%A2
-java -jar lib/build/libs/urlencoder-*.all.jar -d "a%20test%20%26" # -> a test &
+java -jar urlencoder-app/build/libs/urlencoder-*all.jar -d "a%20test%20%26" # -> a test &
```
## Why not simply use `java.net.URLEncoder`?
Apart for being quite inefficient, some URL components encoded with `URLEncoder.encode` might not be able to be properly decoded.
-For example, a simply search query such as:
+For example, a simple search query such as:
```kotlin
val u = URLEncoder.encode("foo +bar", StandardCharsets.UTF_8)
@@ -139,4 +139,3 @@ foo++bar
Unfortunately, decoding with [Uri.decode](https://developer.android.com/reference/android/net/Uri#decode(java.lang.String)) on Android, [decodeURI](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURI) in Javascript, etc. would yield the exact same result.

-
diff --git a/app/pom.xml b/app/pom.xml
deleted file mode 100644
index e610169..0000000
--- a/app/pom.xml
+++ /dev/null
@@ -1,58 +0,0 @@
-
-
-
-
-
-
-
- 4.0.0
- net.thauvin.erik
- urlencoder
- 1.3.1-SNAPSHOT
- UrlEncoder for Kotlin
- A simple defensive application to encode/decode URL components
- https://github.com/ethauvin/urlencoder
-
-
- The Apache License, Version 2.0
- http://www.apache.org/licenses/LICENSE-2.0.txt
-
-
-
-
- gbevin
- Geert Bevin
- gbevin@uwyn.com
- https://github.com/gbevin
-
-
- ethauvin
- Erik C. Thauvin
- erik@thauvin.net
- https://erik.thauvin.net/
-
-
-
- scm:git://github.com/ethauvin/urlencoder.git
- scm:git@github.com:ethauvin/urlencoder.git
- https://github.com/ethauvin/urlencoder
-
-
- GitHub
- https://github.com/ethauvin/urlencoder/issues
-
-
-
- org.jetbrains.kotlin
- kotlin-stdlib-jdk8
- 1.8.0
- compile
-
-
- net.thauvin.erik
- urlencoder-lib
- 1.3.1-SNAPSHOT
- runtime
-
-
-
diff --git a/build.gradle.kts b/build.gradle.kts
index 89e596d..08eb000 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -24,8 +24,8 @@ group = "net.thauvin.erik"
version = "1.4.0-SNAPSHOT"
dependencies {
- kover(projects.lib)
- kover(projects.app)
+ kover(projects.urlencoderLib)
+ kover(projects.urlencoderApp)
}
sonar {
diff --git a/buildSrc/src/main/kotlin/buildsrc/conventions/lang/kotlin-jvm.gradle.kts b/buildSrc/src/main/kotlin/buildsrc/conventions/lang/kotlin-jvm.gradle.kts
deleted file mode 100644
index fd1e8bf..0000000
--- a/buildSrc/src/main/kotlin/buildsrc/conventions/lang/kotlin-jvm.gradle.kts
+++ /dev/null
@@ -1,47 +0,0 @@
-package buildsrc.conventions.lang
-
-import buildsrc.utils.Rife2TestListener
-import org.gradle.api.tasks.testing.logging.TestExceptionFormat
-import org.gradle.api.tasks.testing.logging.TestLogEvent
-import org.jetbrains.kotlin.gradle.dsl.JvmTarget
-import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
-
-/**
- * Common configuration for Kotlin/JVM projects
- *
- * (this can be removed after Kotlin Multiplatform migration)
- */
-
-plugins {
- id("buildsrc.conventions.base")
- kotlin("jvm")
- id("io.gitlab.arturbosch.detekt")
- id("org.jetbrains.kotlinx.kover")
-}
-
-java {
- withSourcesJar()
-}
-
-kotlin {
- jvmToolchain(11)
-}
-
-tasks.withType().configureEach {
- compilerOptions {
- jvmTarget.set(JvmTarget.JVM_11)
- }
-}
-
-tasks.withType().configureEach {
-// useJUnitPlatform()
-
- val testsBadgeApiKey = providers.gradleProperty("testsBadgeApiKey")
- addTestListener(Rife2TestListener(testsBadgeApiKey))
- testLogging {
- exceptionFormat = TestExceptionFormat.FULL
- events = setOf(TestLogEvent.PASSED, TestLogEvent.SKIPPED, TestLogEvent.FAILED)
- }
-
- finalizedBy(tasks.matching { it.name == "koverXmlReport" })
-}
diff --git a/buildSrc/src/main/kotlin/buildsrc/conventions/publishing.gradle.kts b/buildSrc/src/main/kotlin/buildsrc/conventions/publishing.gradle.kts
index 9155ad4..a3800c4 100644
--- a/buildSrc/src/main/kotlin/buildsrc/conventions/publishing.gradle.kts
+++ b/buildSrc/src/main/kotlin/buildsrc/conventions/publishing.gradle.kts
@@ -89,6 +89,7 @@ signing {
!isSnapshotVersion() || gradle.taskGraph.hasTask("publish")
})
}
+
tasks.withType().configureEach {
val signingRequiredPredicate = provider { signing.isRequired }
onlyIf { signingRequiredPredicate.get() }
@@ -106,3 +107,9 @@ val javadocJar by tasks.registering(Jar::class) {
from(tasks.dokkaJavadoc)
archiveClassifier.set("javadoc")
}
+
+publishing {
+ publications.withType().configureEach {
+ artifact(javadocJar)
+ }
+}
diff --git a/lib/pom.xml b/lib/pom.xml
deleted file mode 100644
index 5956aa0..0000000
--- a/lib/pom.xml
+++ /dev/null
@@ -1,52 +0,0 @@
-
-
-
-
-
-
-
- 4.0.0
- net.thauvin.erik
- urlencoder
- 1.4.0-SNAPSHOT
- UrlEncoder for Kotlin
- A simple defensive library to encode/decode URL components
- https://github.com/ethauvin/urlencoder
-
-
- The Apache License, Version 2.0
- http://www.apache.org/licenses/LICENSE-2.0.txt
-
-
-
-
- gbevin
- Geert Bevin
- gbevin@uwyn.com
- https://github.com/gbevin
-
-
- ethauvin
- Erik C. Thauvin
- erik@thauvin.net
- https://erik.thauvin.net/
-
-
-
- scm:git://github.com/ethauvin/urlencoder.git
- scm:git@github.com:ethauvin/urlencoder.git
- https://github.com/ethauvin/urlencoder
-
-
- GitHub
- https://github.com/ethauvin/urlencoder/issues
-
-
-
- org.jetbrains.kotlin
- kotlin-stdlib-jdk8
- 1.8.21
- compile
-
-
-
diff --git a/lib/pom.xml.asc b/lib/pom.xml.asc
deleted file mode 100644
index fb5746a..0000000
--- a/lib/pom.xml.asc
+++ /dev/null
@@ -1,17 +0,0 @@
------BEGIN PGP SIGNATURE-----
-Version: BCPG v1.68
-
-iQIzBAABCAAdFiEEOckYpvaxKUI3I6Pxd2cCpqLaMw4FAmO46y8ACgkQd2cCpqLa
-Mw49qg//YPTr/FbXTVDB2KsPRRRMAMf3tQxvYknuMJsAIOTq9XfkmWM6XY+A1L6+
-Up98MLrBMFKckrZ90bypTCZGhIi52yoE6StchFMJiuLGE+OwQIwPxaX0LNN3pLD6
-BE5muGYZV762PeTkNU0oXNX+e0ReATnUHiriNvz9mZN/xDQLQ+C54wlu9wTKVC6l
-beDezJsNYS4OhQJuJk4bm7w5umEocvbOydzSa/a95hQY9EfsQOUkc4jdGbDRGjKX
-ladPDl8B+Y1+peJDkzcgL+A2T0mJ4bxouI32cGyQBXvawfcfz7ksifhoRDyESXrt
-YoQMcVb9Bnv/k2r4jPSb92znTwCWY7joXrTE44C3wUk6cg8QoCEmjAdEfxwCM17f
-pYIoejBGAMp3xYmzBJg4017e+Tg8hR2SrQHAF65GezEi/d9SOAevEp9aOPPSWOI1
-0LgMcBAE9yxCF2r8EHpFyD2dHfaOI9kKsBfGyKn+8ksu75l6bCZRFJu4syYaNLZn
-b9kHAHgmfikKMnHBZGr/SqYADnCLr/PwJFOhACDYtbhcXVm4PJT3l6Yep8xG1N84
-+qTFA6CuOZjAklonbroHlkgn8ixhuC9ZNtKaIH6zvdG9SoaN4yMu7Itk6GtAAQy6
-qCB+3oylZlKjh1mVo9X8iatL8rdgn8dsEwvC+ItsjsnxXtCPhX4=
-=amWH
------END PGP SIGNATURE-----
diff --git a/settings.gradle.kts b/settings.gradle.kts
index 86af703..5e247de 100644
--- a/settings.gradle.kts
+++ b/settings.gradle.kts
@@ -23,6 +23,6 @@ dependencyResolutionManagement {
enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS")
include(
- ":app",
- ":lib",
+ ":urlencoder-app",
+ ":urlencoder-lib",
)
diff --git a/app/build.gradle.kts b/urlencoder-app/build.gradle.kts
similarity index 70%
rename from app/build.gradle.kts
rename to urlencoder-app/build.gradle.kts
index 1020055..cf24d93 100644
--- a/app/build.gradle.kts
+++ b/urlencoder-app/build.gradle.kts
@@ -18,7 +18,7 @@
import org.jetbrains.dokka.gradle.DokkaTask
plugins {
- buildsrc.conventions.lang.`kotlin-jvm`
+ buildsrc.conventions.lang.`kotlin-multiplatform-jvm`
buildsrc.conventions.publishing
buildsrc.conventions.sonarqube
id("application")
@@ -30,13 +30,21 @@ description = "A simple defensive application to encode/decode URL components"
val deployDir = project.layout.projectDirectory.dir("deploy")
val urlEncoderMainClass = "net.thauvin.erik.urlencoder.UrlEncoder"
-dependencies {
- implementation(projects.lib)
- kover(projects.lib)
-
-// testImplementation("com.willowtreeapps.assertk:assertk-jvm:0.25")
-// testImplementation("org.junit.jupiter:junit-jupiter:5.9.1")
- testImplementation(kotlin("test"))
+kotlin {
+ sourceSets {
+ commonMain {
+ dependencies {
+ implementation(projects.urlencoderLib)
+ }
+ }
+ jvmTest {
+ dependencies {
+ //implementation("com.willowtreeapps.assertk:assertk-jvm:0.25")
+ //implementation("org.junit.jupiter:junit-jupiter:5.9.1")
+ implementation(kotlin("test"))
+ }
+ }
+ }
}
base {
@@ -48,7 +56,7 @@ application {
}
tasks {
- jar {
+ jvmJar {
manifest {
attributes["Main-Class"] = urlEncoderMainClass
}
@@ -56,13 +64,13 @@ tasks {
val fatJar by registering(Jar::class) {
group = LifecycleBasePlugin.BUILD_GROUP
- dependsOn.addAll(listOf("compileJava", "compileKotlin", "processResources"))
+ dependsOn.addAll(listOf("compileJava", "compileKotlinJvm", "processResources"))
archiveClassifier.set("all")
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
manifest { attributes(mapOf("Main-Class" to application.mainClass)) }
from(sourceSets.main.get().output)
- dependsOn(configurations.runtimeClasspath)
- from(configurations.runtimeClasspath.map { classpath ->
+ dependsOn(configurations.jvmRuntimeClasspath)
+ from(configurations.jvmRuntimeClasspath.map { classpath ->
classpath.incoming.artifacts.artifactFiles.files.filter { it.name.endsWith("jar") }.map { zipTree(it) }
})
}
@@ -71,28 +79,22 @@ tasks {
dependsOn(fatJar)
}
- withType().configureEach {
- destination = file("$projectDir/pom.xml")
- }
-
clean {
delete(deployDir)
}
withType().configureEach {
- dokkaSourceSets {
- named("main") {
- moduleName.set("UrlEncoder Application")
- }
+ dokkaSourceSets.configureEach {
+ moduleName.set("UrlEncoder Application")
}
}
val copyToDeploy by registering(Sync::class) {
group = PublishingPlugin.PUBLISH_TASK_GROUP
- from(configurations.runtimeClasspath) {
+ from(configurations.jvmRuntimeClasspath) {
exclude("annotations-*.jar")
}
- from(jar)
+ from(jvmJar)
into(deployDir)
}
@@ -102,13 +104,3 @@ tasks {
dependsOn(build, copyToDeploy)
}
}
-
-publishing {
- publications {
- create("mavenJava") {
- from(components["java"])
- artifactId = rootProject.name
- artifact(tasks.javadocJar)
- }
- }
-}
diff --git a/app/detekt-baseline.xml b/urlencoder-app/detekt-baseline.xml
similarity index 100%
rename from app/detekt-baseline.xml
rename to urlencoder-app/detekt-baseline.xml
diff --git a/app/src/main/kotlin/net/thauvin/erik/urlencoder/UrlEncoder.kt b/urlencoder-app/src/jvmMain/kotlin/net/thauvin/erik/urlencoder/UrlEncoder.kt
similarity index 100%
rename from app/src/main/kotlin/net/thauvin/erik/urlencoder/UrlEncoder.kt
rename to urlencoder-app/src/jvmMain/kotlin/net/thauvin/erik/urlencoder/UrlEncoder.kt
diff --git a/app/src/test/kotlin/net/thauvin/erik/urlencoder/UrlEncoderTest.kt b/urlencoder-app/src/jvmTest/kotlin/net/thauvin/erik/urlencoder/UrlEncoderTest.kt
similarity index 100%
rename from app/src/test/kotlin/net/thauvin/erik/urlencoder/UrlEncoderTest.kt
rename to urlencoder-app/src/jvmTest/kotlin/net/thauvin/erik/urlencoder/UrlEncoderTest.kt
diff --git a/lib/build.gradle.kts b/urlencoder-lib/build.gradle.kts
similarity index 70%
rename from lib/build.gradle.kts
rename to urlencoder-lib/build.gradle.kts
index eee938b..fe5a032 100644
--- a/lib/build.gradle.kts
+++ b/urlencoder-lib/build.gradle.kts
@@ -18,7 +18,7 @@
import org.jetbrains.dokka.gradle.DokkaTask
plugins {
- buildsrc.conventions.lang.`kotlin-jvm`
+ buildsrc.conventions.lang.`kotlin-multiplatform-jvm`
buildsrc.conventions.publishing
buildsrc.conventions.sonarqube
id("com.github.ben-manes.versions")
@@ -28,30 +28,32 @@ description = "A simple defensive library to encode/decode URL components"
val deployDir = project.layout.projectDirectory.dir("deploy")
-dependencies {
-// testImplementation("com.willowtreeapps.assertk:assertk-jvm:0.25")
-// testImplementation("org.junit.jupiter:junit-jupiter:5.9.1")
- testImplementation(kotlin("test"))
+kotlin {
+ sourceSets {
+ jvmTest {
+ dependencies {
+ //implementation("com.willowtreeapps.assertk:assertk-jvm:0.25")
+ //implementation("org.junit.jupiter:junit-jupiter:5.9.1")
+ implementation(kotlin("test"))
+ }
+ }
+ }
}
+
base {
archivesName.set("${rootProject.name}-lib")
}
tasks {
- withType().configureEach {
- destination = file("$projectDir/pom.xml")
- }
clean {
delete(deployDir)
}
withType().configureEach {
- dokkaSourceSets {
- named("main") {
- moduleName.set("UrlEncoder Library")
- }
+ dokkaSourceSets.configureEach {
+ moduleName.set("UrlEncoder Library")
}
}
@@ -60,7 +62,7 @@ tasks {
from(configurations.runtimeClasspath) {
exclude("annotations-*.jar")
}
- from(jar)
+ from(jvmJar)
into(deployDir)
}
@@ -70,13 +72,3 @@ tasks {
dependsOn(build, copyToDeploy)
}
}
-
-publishing {
- publications {
- create("mavenJava") {
- from(components["java"])
- artifactId = "${rootProject.name}-lib"
- artifact(tasks.javadocJar)
- }
- }
-}
diff --git a/lib/detekt-baseline.xml b/urlencoder-lib/detekt-baseline.xml
similarity index 100%
rename from lib/detekt-baseline.xml
rename to urlencoder-lib/detekt-baseline.xml
diff --git a/lib/src/main/kotlin/net/thauvin/erik/urlencoder/UrlEncoderUtil.kt b/urlencoder-lib/src/jvmMain/kotlin/net/thauvin/erik/urlencoder/UrlEncoderUtil.kt
similarity index 100%
rename from lib/src/main/kotlin/net/thauvin/erik/urlencoder/UrlEncoderUtil.kt
rename to urlencoder-lib/src/jvmMain/kotlin/net/thauvin/erik/urlencoder/UrlEncoderUtil.kt
diff --git a/lib/src/test/kotlin/net/thauvin/erik/urlencoder/UrlEncoderUtilTest.kt b/urlencoder-lib/src/jvmTest/kotlin/net/thauvin/erik/urlencoder/UrlEncoderUtilTest.kt
similarity index 100%
rename from lib/src/test/kotlin/net/thauvin/erik/urlencoder/UrlEncoderUtilTest.kt
rename to urlencoder-lib/src/jvmTest/kotlin/net/thauvin/erik/urlencoder/UrlEncoderUtilTest.kt