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. ![URLEncoder](https://live.staticflickr.com/65535/52607534147_6197b42666_z.jpg) - 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