From 98c00641091cabf045d17bd4c96974cb8c9769c4 Mon Sep 17 00:00:00 2001 From: JavaSaBr Date: Mon, 1 Mar 2021 22:44:09 +0300 Subject: [PATCH 01/13] add new funtion utils --- build.gradle | 2 +- .../ss/rlib/common/function/Functions.java | 70 +++++++++++++++++++ .../packet/impl/AbstractPacketReader.java | 16 +++-- 3 files changed, 80 insertions(+), 8 deletions(-) create mode 100644 rlib-common/src/main/java/com/ss/rlib/common/function/Functions.java diff --git a/build.gradle b/build.gradle index ccf2571e..bc86fefd 100644 --- a/build.gradle +++ b/build.gradle @@ -8,7 +8,7 @@ buildscript { } } -rootProject.version = '9.9.0' +rootProject.version = '9.10.0' group = 'com.spaceshift' allprojects { diff --git a/rlib-common/src/main/java/com/ss/rlib/common/function/Functions.java b/rlib-common/src/main/java/com/ss/rlib/common/function/Functions.java new file mode 100644 index 00000000..6d179cb5 --- /dev/null +++ b/rlib-common/src/main/java/com/ss/rlib/common/function/Functions.java @@ -0,0 +1,70 @@ +package com.ss.rlib.common.function; + +import org.jetbrains.annotations.NotNull; + +import java.util.function.Predicate; +import java.util.function.Supplier; + +public class Functions { + + public static class Predicates { + + public static @NotNull Predicate isTrue() { + + return bool -> bool; + } + + public static @NotNull Predicate ifTrue(@NotNull Runnable task) { + + return bool -> { + + if (bool) { + task.run(); + } + + return true; + }; + } + + public static @NotNull Predicate throwIfTrue(@NotNull Supplier factory) { + + return bool -> { + + if (bool) { + throw factory.get(); + } + + return true; + }; + } + + public static @NotNull Predicate isFalse() { + + return bool -> !bool; + } + + public static @NotNull Predicate ifFalse(@NotNull Runnable task) { + + return bool -> { + + if (!bool) { + task.run(); + } + + return true; + }; + } + + public static @NotNull Predicate throwIfFalse(@NotNull Supplier factory) { + + return bool -> { + + if (!bool) { + throw factory.get(); + } + + return true; + }; + } + } +} diff --git a/rlib-network/src/main/java/com/ss/rlib/network/packet/impl/AbstractPacketReader.java b/rlib-network/src/main/java/com/ss/rlib/network/packet/impl/AbstractPacketReader.java index c192d6c9..d3a165a3 100644 --- a/rlib-network/src/main/java/com/ss/rlib/network/packet/impl/AbstractPacketReader.java +++ b/rlib-network/src/main/java/com/ss/rlib/network/packet/impl/AbstractPacketReader.java @@ -278,13 +278,7 @@ else if (packetLength > tempPendingBuffer.capacity()) { if (packet != null) { LOGGER.debug(packet, pck -> "Created instance of packet to read data: " + pck); - - if (packet.read(connection, bufferToRead, dataLength)) { - readPacketHandler.accept(packet); - } else { - LOGGER.error("Packet " + packet + " was read incorrectly"); - } - + readAndHandlePacket(bufferToRead, dataLength, packet); LOGGER.debug(packet, pck -> "Finished reading data of packet: " + pck); readPackets++; } else { @@ -319,6 +313,14 @@ else if (packetLength > tempPendingBuffer.capacity()) { return readPackets; } + protected void readAndHandlePacket(@NotNull ByteBuffer bufferToRead, int dataLength, @NotNull R packet) { + if (packet.read(connection, bufferToRead, dataLength)) { + readPacketHandler.accept(packet); + } else { + LOGGER.error("Packet " + packet + " was read incorrectly"); + } + } + /** * Check buffer's data. * From a8db9816027f38be24f8d965d0276fcd2d5e2837 Mon Sep 17 00:00:00 2001 From: JavaSaBr Date: Mon, 8 Mar 2021 13:52:25 +0300 Subject: [PATCH 02/13] add new methods to array utils --- .../com/ss/rlib/common/util/ArrayUtils.java | 46 +++++++++++++++++-- 1 file changed, 43 insertions(+), 3 deletions(-) diff --git a/rlib-common/src/main/java/com/ss/rlib/common/util/ArrayUtils.java b/rlib-common/src/main/java/com/ss/rlib/common/util/ArrayUtils.java index fb7405f4..52898285 100644 --- a/rlib-common/src/main/java/com/ss/rlib/common/util/ArrayUtils.java +++ b/rlib-common/src/main/java/com/ss/rlib/common/util/ArrayUtils.java @@ -7,9 +7,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.Arrays; -import java.util.Comparator; -import java.util.Objects; +import java.util.*; import java.util.function.*; /** @@ -244,6 +242,48 @@ public static void fill(@NotNull T[] array, @Nullable F argument, @NotNul return result; } + /** + * Combine two arrays to one single array with uniq elements. + * + * @param the base array's component type. + * @param the added array's component type. + * @param base the base array. + * @param added the additional array. + * @return the combined array with uniq elements. + */ + public static @NotNull T[] combineUniq(@NotNull T[] base, @Nullable E[] added) { + return combineUniq(base, added, getComponentType(base)); + } + + /** + * Combine two arrays to one single array with uniq elements. + * + * @param the base array's component type. + * @param the added array's component type. + * @param base the base array. + * @param added the additional array. + * @param type the base array's component type. + * @return the combined array with uniq elements. + */ + public static @NotNull T[] combineUniq( + @Nullable T[] base, + @Nullable E[] added, + @NotNull Class type + ) { + + if (base == null) { + return added == null ? create(type, 0) : added; + } else if (added == null || added.length < 1) { + return base; + } + + var result = new HashSet(base.length + added.length); + result.addAll(Arrays.asList(base)); + result.addAll(Arrays.asList(added)); + + return result.toArray(create(type, result.size())); + } + /** * Check the array on contains the value. * From 41c781a0cfe88dd6ee267188cb3138a10bb22be2 Mon Sep 17 00:00:00 2001 From: JavaSaBr Date: Thu, 30 Jun 2022 20:55:05 +0200 Subject: [PATCH 03/13] migrate maven artifacts to github packages --- build.gradle | 58 ++++++------------- gradle/wrapper/gradle-wrapper.properties | 2 +- rlib-common/build.gradle | 2 +- .../rlib/common/util/random/FastRandom.java | 2 - rlib-fx/build.gradle | 2 +- rlib-logger-impl/build.gradle | 2 +- rlib-logger-slf4j/build.gradle | 4 +- rlib-mail/build.gradle | 4 +- rlib-network/build.gradle | 4 +- rlib-testcontainers/build.gradle | 14 ++--- 10 files changed, 36 insertions(+), 58 deletions(-) diff --git a/build.gradle b/build.gradle index ccf2571e..d03b66b9 100644 --- a/build.gradle +++ b/build.gradle @@ -1,25 +1,13 @@ -buildscript { - repositories { - maven { url 'https://plugins.gradle.org/m2/' } - } - dependencies { - classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.4' - classpath 'net.ltgt.gradle:gradle-apt-plugin:0.21' - } -} - -rootProject.version = '9.9.0' +rootProject.version = '9.9.0-alpha2' group = 'com.spaceshift' allprojects { repositories { mavenCentral() - jcenter() } - apply plugin: 'java' - apply plugin: 'com.jfrog.bintray' + apply plugin: "java-library" apply plugin: 'maven-publish' sourceCompatibility = JavaVersion.VERSION_11 @@ -49,7 +37,7 @@ allprojects { compileOnly "org.projectlombok:lombok:$lombokVersion" annotationProcessor "org.projectlombok:lombok:$lombokVersion" - testCompile "org.junit.jupiter:junit-jupiter-api:$junitJupiterVersion" + testImplementation "org.junit.jupiter:junit-jupiter-api:$junitJupiterVersion" testCompileOnly "org.projectlombok:lombok:$lombokVersion" testCompileOnly "org.jetbrains:annotations:$jetbrainsAnnotation" testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:$junitJupiterVersion" @@ -66,6 +54,10 @@ allprojects { } }*/ + compileJava { + options.encoding = "UTF-8" + } + task sourcesJar(type: Jar, dependsOn: classes) { afterEvaluate { getArchiveClassifier().set("sources") @@ -83,6 +75,17 @@ allprojects { } publishing { + repositories { + maven { + name = "GitHubPackages" + url = uri("https://maven.pkg.github.com/javasabr/maven-repo") + credentials { + username = project.findProperty("gpr.user") ?: System.getenv("GITHUB_USERNAME") + password = project.findProperty("gpr.key") ?: System.getenv("GITHUB_TOKEN") + } + } + } + publications { mavenJava(MavenPublication) { from components.java @@ -97,29 +100,6 @@ allprojects { } } - bintray { - afterEvaluate { - user = project.hasProperty("bintrayUser") ? project.property("bintrayUser") : "" - key = project.hasProperty("bintrayKey") ? project.property("bintrayKey") : "" - publications = ['mavenJava'] - pkg { - repo = 'maven' - name = 'com.spaceshift.' + jar.baseName - licenses = ['Apache-2.0'] - websiteUrl = 'https://github.com/JavaSaBr/Rlib' - vcsUrl = 'https://github.com/JavaSaBr/RLib.git' - issueTrackerUrl = 'https://github.com/JavaSaBr/RLib/issues' - githubRepo = 'JavaSaBr/RLib' - githubReleaseNotesFile = 'README.md' - version { - name = rootProject.version - desc = rootProject.version - released = new Date() - } - } - } - } - configurations { testArtifacts.extendsFrom testRuntime } @@ -139,6 +119,6 @@ allprojects { } wrapper { - gradleVersion = '6.0' + gradleVersion = '7.4.2' distributionType = Wrapper.DistributionType.ALL } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index ee69dd68..92f06b50 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/rlib-common/build.gradle b/rlib-common/build.gradle index 08f5da75..bfdbde5a 100644 --- a/rlib-common/build.gradle +++ b/rlib-common/build.gradle @@ -1,5 +1,5 @@ dependencies { - compile project(":rlib-logger-api") + api project(":rlib-logger-api") } jar { diff --git a/rlib-common/src/main/java/com/ss/rlib/common/util/random/FastRandom.java b/rlib-common/src/main/java/com/ss/rlib/common/util/random/FastRandom.java index 9e640179..d97f5c79 100644 --- a/rlib-common/src/main/java/com/ss/rlib/common/util/random/FastRandom.java +++ b/rlib-common/src/main/java/com/ss/rlib/common/util/random/FastRandom.java @@ -3,8 +3,6 @@ import org.jetbrains.annotations.NotNull; /** - * Реализация быстрого рандоминайзера на основе псевдорандом генератора. - * * @author JavaSaBr */ public final class FastRandom implements Random { diff --git a/rlib-fx/build.gradle b/rlib-fx/build.gradle index 07238f14..6522b394 100644 --- a/rlib-fx/build.gradle +++ b/rlib-fx/build.gradle @@ -3,7 +3,7 @@ plugins { } dependencies { - compile project(":rlib-common") + api project(":rlib-common") } jar { diff --git a/rlib-logger-impl/build.gradle b/rlib-logger-impl/build.gradle index 48d3caee..05034ab1 100644 --- a/rlib-logger-impl/build.gradle +++ b/rlib-logger-impl/build.gradle @@ -1,5 +1,5 @@ dependencies { - compile project(":rlib-common") + api project(":rlib-common") } jar { diff --git a/rlib-logger-slf4j/build.gradle b/rlib-logger-slf4j/build.gradle index 0ca76fa5..addf008d 100644 --- a/rlib-logger-slf4j/build.gradle +++ b/rlib-logger-slf4j/build.gradle @@ -1,6 +1,6 @@ dependencies { - compile project(":rlib-logger-api") - compile "org.slf4j:slf4j-api:$sl4jVersion" + api project(":rlib-logger-api") + api "org.slf4j:slf4j-api:$sl4jVersion" testRuntime "org.slf4j:slf4j-simple:$sl4jVersion" } diff --git a/rlib-mail/build.gradle b/rlib-mail/build.gradle index 01eee726..87994de2 100644 --- a/rlib-mail/build.gradle +++ b/rlib-mail/build.gradle @@ -1,6 +1,6 @@ dependencies { - compile project(":rlib-common") - compile "javax.mail:mail:$javaxMailVersion" + api project(":rlib-common") + api "javax.mail:mail:$javaxMailVersion" testImplementation project(":rlib-testcontainers") } diff --git a/rlib-network/build.gradle b/rlib-network/build.gradle index 5393c2a1..bafcd000 100644 --- a/rlib-network/build.gradle +++ b/rlib-network/build.gradle @@ -3,7 +3,7 @@ jar { } dependencies { - compile project(":rlib-common") - compile "io.projectreactor:reactor-core:$projectreactorVersion" + api project(":rlib-common") + api "io.projectreactor:reactor-core:$projectreactorVersion" testRuntimeOnly project(":rlib-logger-impl") } diff --git a/rlib-testcontainers/build.gradle b/rlib-testcontainers/build.gradle index dd1d9013..cc7934ee 100644 --- a/rlib-testcontainers/build.gradle +++ b/rlib-testcontainers/build.gradle @@ -1,12 +1,12 @@ dependencies { - compile project(":rlib-common") - compile "org.testcontainers:testcontainers:$testcontainersVersion" - compile "org.slf4j:slf4j-api:$sl4jVersion" - compile "org.slf4j:slf4j-ext:$sl4jVersion" + api project(":rlib-common") + api "org.testcontainers:testcontainers:$testcontainersVersion" + api "org.slf4j:slf4j-api:$sl4jVersion" + api "org.slf4j:slf4j-ext:$sl4jVersion" // FIXME - compile "com.kohlschutter.junixsocket:junixsocket-common:2.1.1" - compile "com.kohlschutter.junixsocket:junixsocket-native-common:2.1.1" - runtime "org.slf4j:slf4j-simple:$sl4jVersion" + api "com.kohlschutter.junixsocket:junixsocket-common:2.1.1" + api "com.kohlschutter.junixsocket:junixsocket-native-common:2.1.1" + implementation "org.slf4j:slf4j-simple:$sl4jVersion" testImplementation project(":rlib-mail") } From 4861e89ff48cd0dacdce72e5a8b293afd2780857 Mon Sep 17 00:00:00 2001 From: JavaSaBr Date: Fri, 1 Jul 2022 08:10:49 +0200 Subject: [PATCH 04/13] work on github packages --- build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index d03b66b9..2da0248b 100644 --- a/build.gradle +++ b/build.gradle @@ -1,7 +1,7 @@ -rootProject.version = '9.9.0-alpha2' +rootProject.version = '9.9.1-alpha3' group = 'com.spaceshift' -allprojects { +subprojects { repositories { mavenCentral() From 1c150bfb120b2bf87af72b0d6b8335f769c59c53 Mon Sep 17 00:00:00 2001 From: JavaSaBr Date: Sat, 2 Jul 2022 21:03:15 +0200 Subject: [PATCH 05/13] move publishing to gitlab --- build.gradle | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/build.gradle b/build.gradle index 2da0248b..28d193fb 100644 --- a/build.gradle +++ b/build.gradle @@ -1,4 +1,4 @@ -rootProject.version = '9.9.1-alpha3' +rootProject.version = '9.9.1-alpha' group = 'com.spaceshift' subprojects { @@ -36,7 +36,7 @@ subprojects { compileOnly "org.jetbrains:annotations:$jetbrainsAnnotation" compileOnly "org.projectlombok:lombok:$lombokVersion" annotationProcessor "org.projectlombok:lombok:$lombokVersion" - + testImplementation "org.junit.jupiter:junit-jupiter-api:$junitJupiterVersion" testCompileOnly "org.projectlombok:lombok:$lombokVersion" testCompileOnly "org.jetbrains:annotations:$jetbrainsAnnotation" @@ -77,11 +77,14 @@ subprojects { publishing { repositories { maven { - name = "GitHubPackages" - url = uri("https://maven.pkg.github.com/javasabr/maven-repo") - credentials { - username = project.findProperty("gpr.user") ?: System.getenv("GITHUB_USERNAME") - password = project.findProperty("gpr.key") ?: System.getenv("GITHUB_TOKEN") + name = "GitlabPackages" + url = uri("https://gitlab.com/api/v4/projects/37512056/packages/maven") + credentials(HttpHeaderCredentials) { + name = "Private-Token" + value = project.findProperty("gitlab.token") ?: System.getenv("GITLAB_TOKEN") + } + authentication { + header(HttpHeaderAuthentication) } } } From dd27a60cf310d3183107974523c2dc8fcf36fabc Mon Sep 17 00:00:00 2001 From: JavaSaBr Date: Sat, 2 Jul 2022 21:35:17 +0200 Subject: [PATCH 06/13] update libraries --- build.gradle | 40 +++++++++++++++----------------- gradle/libs.versions.toml | 30 ++++++++++++++++++++++++ rlib-common/build.gradle | 2 +- rlib-fx/build.gradle | 4 ++-- rlib-logger-impl/build.gradle | 2 +- rlib-logger-slf4j/build.gradle | 6 ++--- rlib-mail/build.gradle | 6 ++--- rlib-network/build.gradle | 6 ++--- rlib-testcontainers/build.gradle | 12 +++++----- settings.gradle | 2 ++ 10 files changed, 70 insertions(+), 40 deletions(-) create mode 100644 gradle/libs.versions.toml diff --git a/build.gradle b/build.gradle index 28d193fb..493967ee 100644 --- a/build.gradle +++ b/build.gradle @@ -1,29 +1,19 @@ rootProject.version = '9.9.1-alpha' group = 'com.spaceshift' -subprojects { +allprojects { repositories { mavenCentral() } apply plugin: "java-library" + apply plugin: "java-test-fixtures" apply plugin: 'maven-publish' sourceCompatibility = JavaVersion.VERSION_11 targetCompatibility = JavaVersion.VERSION_11 - ext { - projectreactorVersion = '3.2.9.RELEASE' - sl4jVersion = '1.7.26' - javaxMailVersion = "1.5.0-b01" - testcontainersVersion = '1.11.1' - lombokVersion = '1.18.6' - junitJupiterVersion = "5.4.2" - jetbrainsAnnotation = '17.0.0' - bintrayVersion = version - } - javadoc { failOnError = false } @@ -33,15 +23,15 @@ subprojects { } dependencies { - compileOnly "org.jetbrains:annotations:$jetbrainsAnnotation" - compileOnly "org.projectlombok:lombok:$lombokVersion" - annotationProcessor "org.projectlombok:lombok:$lombokVersion" - - testImplementation "org.junit.jupiter:junit-jupiter-api:$junitJupiterVersion" - testCompileOnly "org.projectlombok:lombok:$lombokVersion" - testCompileOnly "org.jetbrains:annotations:$jetbrainsAnnotation" - testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:$junitJupiterVersion" - testAnnotationProcessor "org.projectlombok:lombok:$lombokVersion" + compileOnly libs.jetbrains.annotations + compileOnly libs.lombok + annotationProcessor libs.lombok + + testImplementation libs.junit.api + testCompileOnly libs.lombok + testCompileOnly libs.jetbrains.annotations + testRuntimeOnly libs.junit.engine + testAnnotationProcessor libs.lombok } /*compileJava { @@ -58,6 +48,14 @@ subprojects { options.encoding = "UTF-8" } + compileTestJava { + options.encoding = "UTF-8" + } + + tasks.withType(Javadoc) { + options.encoding = "UTF-8" + } + task sourcesJar(type: Jar, dependsOn: classes) { afterEvaluate { getArchiveClassifier().set("sources") diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml new file mode 100644 index 00000000..b91e460b --- /dev/null +++ b/gradle/libs.versions.toml @@ -0,0 +1,30 @@ +[versions] +# https://mvnrepository.com/artifact/org.slf4j/slf4j-api +slf4j = "1.7.36" +# https://mvnrepository.com/artifact/io.projectreactor/reactor-core +project-reactor = "3.4.19" +# https://mvnrepository.com/artifact/javax.mail/mail +javax-mail = "1.5.0-b01" +# https://mvnrepository.com/artifact/org.testcontainers/testcontainers +testcontainers = "1.17.3" +# https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-engine +junit-jupiter = "5.8.2" +# https://mvnrepository.com/artifact/org.jetbrains/annotations +jetbrains-annotations = "23.0.0" +# https://mvnrepository.com/artifact/org.projectlombok/lombok +lombok = "1.18.24" + +[libraries] +project-reactor-core = { module = "io.projectreactor:reactor-core", version.ref = "project-reactor" } +jetbrains-annotations = { module = "org.jetbrains:annotations", version.ref = "jetbrains-annotations" } +lombok = { module = "org.projectlombok:lombok", version.ref = "lombok" } +junit-engine = { module = "org.junit.jupiter:junit-jupiter-engine", version.ref = "junit-jupiter" } +junit-api = { module = "org.junit.jupiter:junit-jupiter-api", version.ref = "junit-jupiter" } +slf4j-api = { module = "org.slf4j:slf4j-api", version.ref = "slf4j" } +slf4j-simple = { module = "org.slf4j:slf4j-simple", version.ref = "slf4j" } +slf4j-ext = { module = "org.slf4j:slf4j-ext", version.ref = "slf4j" } +javax-mail = { module = "javax.mail:mail", version.ref = "javax-mail" } +testcontainers = { module = "org.testcontainers:testcontainers", version.ref = "testcontainers" } + +[bundles] +junit = ["junit-engine", "junit-api"] \ No newline at end of file diff --git a/rlib-common/build.gradle b/rlib-common/build.gradle index bfdbde5a..f0f9f212 100644 --- a/rlib-common/build.gradle +++ b/rlib-common/build.gradle @@ -1,5 +1,5 @@ dependencies { - api project(":rlib-logger-api") + api projects.rlibLoggerApi } jar { diff --git a/rlib-fx/build.gradle b/rlib-fx/build.gradle index 6522b394..e3fee6c8 100644 --- a/rlib-fx/build.gradle +++ b/rlib-fx/build.gradle @@ -1,9 +1,9 @@ plugins { - id 'org.openjfx.javafxplugin' version '0.0.8' + id 'org.openjfx.javafxplugin' version '0.0.13' } dependencies { - api project(":rlib-common") + api projects.rlibCommon } jar { diff --git a/rlib-logger-impl/build.gradle b/rlib-logger-impl/build.gradle index 05034ab1..ae07e3c7 100644 --- a/rlib-logger-impl/build.gradle +++ b/rlib-logger-impl/build.gradle @@ -1,5 +1,5 @@ dependencies { - api project(":rlib-common") + api projects.rlibCommon } jar { diff --git a/rlib-logger-slf4j/build.gradle b/rlib-logger-slf4j/build.gradle index addf008d..c6f1e741 100644 --- a/rlib-logger-slf4j/build.gradle +++ b/rlib-logger-slf4j/build.gradle @@ -1,8 +1,8 @@ dependencies { - api project(":rlib-logger-api") - api "org.slf4j:slf4j-api:$sl4jVersion" + api projects.rlibLoggerApi + api libs.slf4j.api - testRuntime "org.slf4j:slf4j-simple:$sl4jVersion" + testRuntime libs.slf4j.simple } jar { diff --git a/rlib-mail/build.gradle b/rlib-mail/build.gradle index 87994de2..861d75a0 100644 --- a/rlib-mail/build.gradle +++ b/rlib-mail/build.gradle @@ -1,8 +1,8 @@ dependencies { - api project(":rlib-common") - api "javax.mail:mail:$javaxMailVersion" + api projects.rlibCommon + api libs.javax.mail - testImplementation project(":rlib-testcontainers") + testImplementation projects.rlibTestcontainers } jar { diff --git a/rlib-network/build.gradle b/rlib-network/build.gradle index bafcd000..6d82232f 100644 --- a/rlib-network/build.gradle +++ b/rlib-network/build.gradle @@ -3,7 +3,7 @@ jar { } dependencies { - api project(":rlib-common") - api "io.projectreactor:reactor-core:$projectreactorVersion" - testRuntimeOnly project(":rlib-logger-impl") + api projects.rlibCommon + api libs.project.reactor.core + testRuntimeOnly projects.rlibLoggerImpl } diff --git a/rlib-testcontainers/build.gradle b/rlib-testcontainers/build.gradle index cc7934ee..40e033ef 100644 --- a/rlib-testcontainers/build.gradle +++ b/rlib-testcontainers/build.gradle @@ -1,14 +1,14 @@ dependencies { - api project(":rlib-common") - api "org.testcontainers:testcontainers:$testcontainersVersion" - api "org.slf4j:slf4j-api:$sl4jVersion" - api "org.slf4j:slf4j-ext:$sl4jVersion" + api projects.rlibCommon + api libs.testcontainers + api libs.slf4j.api + api libs.slf4j.ext // FIXME api "com.kohlschutter.junixsocket:junixsocket-common:2.1.1" api "com.kohlschutter.junixsocket:junixsocket-native-common:2.1.1" - implementation "org.slf4j:slf4j-simple:$sl4jVersion" + implementation libs.slf4j.simple - testImplementation project(":rlib-mail") + testImplementation projects.rlibMail } jar { diff --git a/settings.gradle b/settings.gradle index 20c647dd..849dae0d 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,3 +1,5 @@ +enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS") + rootProject.name = 'rlib' include ':rlib-common' From da688be5c35eb0fb16f5b1ebca343161dd1bda0a Mon Sep 17 00:00:00 2001 From: JavaSaBr Date: Sat, 2 Jul 2022 21:50:28 +0200 Subject: [PATCH 07/13] increase version --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 493967ee..e5d02281 100644 --- a/build.gradle +++ b/build.gradle @@ -1,4 +1,4 @@ -rootProject.version = '9.9.1-alpha' +rootProject.version = '9.9.1-alpha2' group = 'com.spaceshift' allprojects { From 050cdd1bb3616564b65814c708fbc4ef6931152c Mon Sep 17 00:00:00 2001 From: JavaSaBr Date: Sun, 3 Jul 2022 09:46:26 +0200 Subject: [PATCH 08/13] finalize version --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index e5d02281..99c6a7bb 100644 --- a/build.gradle +++ b/build.gradle @@ -1,4 +1,4 @@ -rootProject.version = '9.9.1-alpha2' +rootProject.version = '9.9.1' group = 'com.spaceshift' allprojects { From 1392ad312a936284063973399dffa83276c6afef Mon Sep 17 00:00:00 2001 From: javasabr Date: Thu, 19 Dec 2024 20:56:32 +0100 Subject: [PATCH 09/13] update gradle config and migrate to java 17 --- build.gradle | 206 +++++++++-------- gradle/wrapper/gradle-wrapper.jar | Bin 55190 -> 59821 bytes gradle/wrapper/gradle-wrapper.properties | 2 +- gradlew | 282 ++++++++++++++--------- gradlew.bat | 43 ++-- rlib-common/build.gradle | 4 +- rlib-fx/build.gradle | 10 +- rlib-logger-api/build.gradle | 5 +- rlib-logger-impl/build.gradle | 4 +- rlib-logger-slf4j/build.gradle | 8 +- rlib-mail/build.gradle | 8 +- rlib-network/build.gradle | 13 +- rlib-testcontainers/build.gradle | 20 +- 13 files changed, 336 insertions(+), 269 deletions(-) diff --git a/build.gradle b/build.gradle index 99c6a7bb..773ea030 100644 --- a/build.gradle +++ b/build.gradle @@ -1,125 +1,127 @@ -rootProject.version = '9.9.1' -group = 'com.spaceshift' +rootProject.version = '9.9.2' +group = 'javasabr' allprojects { - repositories { - mavenCentral() + repositories { + mavenCentral() + } + + apply plugin: "java-library" + apply plugin: "java-test-fixtures" + apply plugin: 'maven-publish' + + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 + + javadoc { + failOnError = false + } + + test { + useJUnitPlatform() + } + + dependencies { + compileOnly libs.jetbrains.annotations + compileOnly libs.lombok + annotationProcessor libs.lombok + + testImplementation libs.junit.api + testCompileOnly libs.lombok + testCompileOnly libs.jetbrains.annotations + testRuntimeOnly libs.junit.engine + testAnnotationProcessor libs.lombok + } + + /*compileJava { + inputs.property("moduleName", jar.baseName) + doFirst { + options.compilerArgs = [ + '--module-path', classpath.asPath, + ] + classpath = files() + } + }*/ + + compileJava { + options.encoding = "UTF-8" + } + + compileTestJava { + options.encoding = "UTF-8" + } + + tasks.withType(Javadoc).configureEach { + options.encoding = "UTF-8" + } + + task sourcesJar(type: Jar, dependsOn: classes) { + afterEvaluate { + getArchiveClassifier().set("sources") + getArchiveBaseName().set(jar.getArchiveBaseName()) + from sourceSets.main.allSource } + } - apply plugin: "java-library" - apply plugin: "java-test-fixtures" - apply plugin: 'maven-publish' - - sourceCompatibility = JavaVersion.VERSION_11 - targetCompatibility = JavaVersion.VERSION_11 - - javadoc { - failOnError = false + task javadocJar(type: Jar, dependsOn: javadoc) { + afterEvaluate { + getArchiveClassifier().set("javadoc") + getArchiveBaseName().set(jar.getArchiveBaseName()) + from sourceSets.main.allSource } + } - test { - useJUnitPlatform() - } - - dependencies { - compileOnly libs.jetbrains.annotations - compileOnly libs.lombok - annotationProcessor libs.lombok - - testImplementation libs.junit.api - testCompileOnly libs.lombok - testCompileOnly libs.jetbrains.annotations - testRuntimeOnly libs.junit.engine - testAnnotationProcessor libs.lombok - } - - /*compileJava { - inputs.property("moduleName", jar.baseName) - doFirst { - options.compilerArgs = [ - '--module-path', classpath.asPath, - ] - classpath = files() + publishing { + repositories { + maven { + name = "GitlabPackages" + url = uri("https://gitlab.com/api/v4/projects/37512056/packages/maven") + credentials(HttpHeaderCredentials) { + name = "Private-Token" + value = project.findProperty("gitlab.token") ?: System.getenv("GITLAB_TOKEN") } - }*/ - - compileJava { - options.encoding = "UTF-8" - } - - compileTestJava { - options.encoding = "UTF-8" - } - - tasks.withType(Javadoc) { - options.encoding = "UTF-8" - } - - task sourcesJar(type: Jar, dependsOn: classes) { - afterEvaluate { - getArchiveClassifier().set("sources") - getArchiveBaseName().set(jar.getArchiveBaseName()) - from sourceSets.main.allSource + authentication { + header(HttpHeaderAuthentication) } + } } - task javadocJar(type: Jar, dependsOn: javadoc) { + publications { + mavenJava(MavenPublication) { + from components.java + version = rootProject.version afterEvaluate { - getArchiveClassifier().set("javadoc") - getArchiveBaseName().set(jar.getArchiveBaseName()) - from sourceSets.main.allSource - } - } - - publishing { - repositories { - maven { - name = "GitlabPackages" - url = uri("https://gitlab.com/api/v4/projects/37512056/packages/maven") - credentials(HttpHeaderCredentials) { - name = "Private-Token" - value = project.findProperty("gitlab.token") ?: System.getenv("GITLAB_TOKEN") - } - authentication { - header(HttpHeaderAuthentication) - } - } - } - - publications { - mavenJava(MavenPublication) { - from components.java - artifact sourcesJar - artifact javadocJar - version = rootProject.version - afterEvaluate { - artifactId = jar.baseName - groupId = rootProject.group - } - } + artifactId = jar.archiveBaseName.get() + groupId = rootProject.group } + artifact sourcesJar + artifact javadocJar + } } + } - configurations { - testArtifacts.extendsFrom testRuntime - } + configurations { + testArtifacts.extendsFrom testRuntime + } - task testJar(type: Jar) { - getArchiveClassifier().set("test") - from sourceSets.test.output - } + tasks.register('testJar', Jar) { + getArchiveClassifier().set("test") + from sourceSets.test.output + } - artifacts { - testArtifacts testJar - } + artifacts { + testArtifacts testJar + } - tasks.withType(Test) { - maxParallelForks = Runtime.runtime.availableProcessors() + tasks.withType(Test).tap { + configureEach { + maxParallelForks = Runtime.runtime.availableProcessors() } + } } wrapper { - gradleVersion = '7.4.2' - distributionType = Wrapper.DistributionType.ALL + gradleVersion = '8.11.1' + distributionType = Wrapper.DistributionType.ALL } diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 87b738cbd051603d91cc39de6cb000dd98fe6b02..41d9927a4d4fb3f96a785543079b8df6723c946b 100644 GIT binary patch delta 26986 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 delta 22520 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
IA&%cW_eA0aRkj43NJ!y{{iGp}3 zYgv8~@%tF0so9}97;ic=h}M@K(eDUHTI%8!2J!q|GQt)%eAdnEi_GSBEIGWJXMYsU3)--|dW z$Jm+o-3iV)RM$M$^sB^oiZv+)(|VIWP%YOY5IAm}HC5Z(9OFTDhEIYBto2l1fh!Dj z4GL4TE9;CD>YofWSSyoP*#?AmJ4_tXeaW)nDAvU<|5E;NGhM`o;RiSpQ!B?rJNcz) z?NN~>V;0@BXI!IUE!9NQ<=@Z54jP~tl*#<+t$>m%JD-;IrE=^0kiB26Hk*r&jSoRt zhy>AC@~e(*<9+QH2Tvzc?0Sg_-)IX{NTX^x^+hzO2iMQKAG2B2ys&Hk zR5&o5Yn)9IdFN(dZ*Df};=E$C7ryx1vX8yg%B9&G&sC&J={0{5^7526IrQQ$NG930 z6Hl>=5AjO-ektkDxkA?rj$DTKFU&#_Os)jIrZzoW)+L|5R+GPL=)}yMsLtlT%7Du; z#R&z%y@py|K-~^fEwe9*h3^Hl-Q(DaH06xHC!P8e}>W;i1J9 zTd0@y;k|48Ahw!dl8~%En|LqP_(t3{2*L6$Kh=I--3d+3Zib-!F5xoLFPQkG@_}C$>l3xS zP=WD0ePfUcr|A@J+wV|U*BITQSOOZtDPfj1vuCy6u#ZV!df0?WD|&xCLyGJU%SyeN zpHsD0rqGD23k>X_?Hb37dr`V!aC$*{x{nUEO#doe$6U=Y?1{M3m@_>^7>C%G_cl~p zWhS2`7s__;%5c-1-ohWkHH7$a@HMATJtcIC`tYV%0J$I%(#p4dIYa#Tkxatir^WaZ zyYM$Mmf&|odgUDf(7+}}%n^5h1Kxi?ja`8q^pZTU>v zHv|#MR@K?P0W`6KJ+!i-oDmUX9-X;wpZU_buj*VvuKdX=N=8~EsfgTP$fXBkUB@BI z;|*6zaG00Y!-flL6k+jBt}1qFc_rr1wafPS_nR3tqlLqa+0nV0zj4T+Ct$_?pbkCW z({l{Qb-Je45N}9a^X7GFxd{#Od1{h&LQEkk-Gcn`{M}2eAt8TR5~8~mrS#!C4G7RB z&8UzOIJg6&J|Q=a4BcEm^GiL)J2E2DthU)-o^HqPYrJD|RtVt>wpm2bUcK(eUwF*_ z+gA+#rso+d`xuP~b<&_tD;E=UdkYRTdmEs|lN!7UhmW!ij;J+apaDFyuzH&riaYoJ z+wv0)jRT0A6#^LNxIuQ9fHONO5XX2AaGis|{%CoJBL2^(C_o+SU!WKs1)z!~fc>|- z85$bhe~_r(qJTE+f5BWtn1Im&0Z@*Ff?6T}n5lttBpg&majPPjXaR$HIH;BurE&q! z771Ygts+N5ga5(&iU9?p1T?t_0lWn`=!E^2LSumj_TTy_RQ35EK1&?8pj;H_N$LOO zZT|rZ5cmg#1!ygDgT5)=jZwK_p_RAlBX{xutzjtFG0L~Ht?2onlKfp!m|A2`B zqa`@#TIcV3E-8TU3~t4%C0P)*(LW*<@M4)7_V3yTiizP5HghW=eOU_7^g_q|+fIPC zFV$lONUey1j;(+IFFs&ml>q2kfr9*OQ7Q#+x}px^dmuGD<>;!hbOWGpH+$sX$k$2*9xg2ic|H zf&#Y$K~`C};`){(=xOdP+ei%|iktwj*@lA3@^4MF_0)fvV1LCe87c{xJ!e{{!pa B4=Mlv diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 92f06b50..11581996 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index af6708ff..1b6c7873 100755 --- a/gradlew +++ b/gradlew @@ -1,78 +1,129 @@ -#!/usr/bin/env sh +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ############################################################################## -## -## Gradle start up script for UN*X -## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# ############################################################################## # Attempt to set APP_HOME + # Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` +APP_BASE_NAME=${0##*/} # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m"' +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' # Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" +MAX_FD=maximum warn () { echo "$*" -} +} >&2 die () { echo echo "$*" echo exit 1 -} +} >&2 # OS specific support (must be 'true' or 'false'). cygwin=false msys=false darwin=false nonstop=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; - NONSTOP* ) - nonstop=true - ;; +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; esac CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + # Determine the Java command to use to start the JVM. if [ -n "$JAVA_HOME" ] ; then if [ -x "$JAVA_HOME/jre/sh/java" ] ; then # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" + JAVACMD=$JAVA_HOME/jre/sh/java else - JAVACMD="$JAVA_HOME/bin/java" + JAVACMD=$JAVA_HOME/bin/java fi if [ ! -x "$JAVACMD" ] ; then die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME @@ -81,7 +132,7 @@ Please set the JAVA_HOME variable in your environment to match the location of your Java installation." fi else - JAVACMD="java" + JAVACMD=java which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the @@ -89,84 +140,95 @@ location of your Java installation." fi # Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac fi -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) -# For Cygwin, switch paths to Windows format before running java -if $cygwin ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - JAVACMD=`cygpath --unix "$JAVACMD"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) fi - i=$((i+1)) + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg done - case $i in - (0) set -- ;; - (1) set -- "$args0" ;; - (2) set -- "$args0" "$args1" ;; - (3) set -- "$args0" "$args1" "$args2" ;; - (4) set -- "$args0" "$args1" "$args2" "$args3" ;; - (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; - esac fi -# Escape application args -save () { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " -} -APP_ARGS=$(save "$@") - -# Collect all arguments for the java command, following the shell quoting and substitution rules -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" - -# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong -if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then - cd "$(dirname "$0")" -fi +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat index 0f8d5937..ac1b06f9 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -1,3 +1,19 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + @if "%DEBUG%" == "" @echo off @rem ########################################################################## @rem @@ -13,15 +29,18 @@ if "%DIRNAME%" == "" set DIRNAME=. set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" @rem Find java.exe if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init +if "%ERRORLEVEL%" == "0" goto execute echo. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. @@ -35,7 +54,7 @@ goto fail set JAVA_HOME=%JAVA_HOME:"=% set JAVA_EXE=%JAVA_HOME%/bin/java.exe -if exist "%JAVA_EXE%" goto init +if exist "%JAVA_EXE%" goto execute echo. echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% @@ -45,28 +64,14 @@ echo location of your Java installation. goto fail -:init -@rem Get command-line arguments, handling Windows variants - -if not "%OS%" == "Windows_NT" goto win9xME_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* - :execute @rem Setup the command line set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + @rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* :end @rem End local scope for the variables with windows NT shell diff --git a/rlib-common/build.gradle b/rlib-common/build.gradle index f0f9f212..ab1cb739 100644 --- a/rlib-common/build.gradle +++ b/rlib-common/build.gradle @@ -1,7 +1,7 @@ dependencies { - api projects.rlibLoggerApi + api projects.rlibLoggerApi } jar { - baseName "rlib.common" + archiveBaseName.set('rlib.common') } \ No newline at end of file diff --git a/rlib-fx/build.gradle b/rlib-fx/build.gradle index e3fee6c8..1a4eac72 100644 --- a/rlib-fx/build.gradle +++ b/rlib-fx/build.gradle @@ -1,16 +1,16 @@ plugins { - id 'org.openjfx.javafxplugin' version '0.0.13' + id 'org.openjfx.javafxplugin' version '0.1.0' } dependencies { - api projects.rlibCommon + api projects.rlibCommon } jar { - baseName "rlib.fx" + archiveBaseName.set('rlib.fx') } javafx { - modules = ['javafx.controls'] - version = "11.0.1" + modules = ['javafx.controls'] + version = '17' } diff --git a/rlib-logger-api/build.gradle b/rlib-logger-api/build.gradle index fd144c66..fe93df1d 100644 --- a/rlib-logger-api/build.gradle +++ b/rlib-logger-api/build.gradle @@ -1,6 +1,3 @@ -dependencies { -} - jar { - baseName "rlib.logger.api" + archiveBaseName.set('rlib.logger.api') } \ No newline at end of file diff --git a/rlib-logger-impl/build.gradle b/rlib-logger-impl/build.gradle index ae07e3c7..cb9caf10 100644 --- a/rlib-logger-impl/build.gradle +++ b/rlib-logger-impl/build.gradle @@ -1,7 +1,7 @@ dependencies { - api projects.rlibCommon + api projects.rlibCommon } jar { - baseName "rlib.logger.impl" + archiveBaseName.set('rlib.logger.impl') } \ No newline at end of file diff --git a/rlib-logger-slf4j/build.gradle b/rlib-logger-slf4j/build.gradle index c6f1e741..c0979892 100644 --- a/rlib-logger-slf4j/build.gradle +++ b/rlib-logger-slf4j/build.gradle @@ -1,10 +1,10 @@ dependencies { - api projects.rlibLoggerApi - api libs.slf4j.api + api projects.rlibLoggerApi + api libs.slf4j.api - testRuntime libs.slf4j.simple + testRuntime libs.slf4j.simple } jar { - baseName "rlib.logger.slf4j" + archiveBaseName.set('rlib.logger.slf4j') } \ No newline at end of file diff --git a/rlib-mail/build.gradle b/rlib-mail/build.gradle index 861d75a0..7760edf5 100644 --- a/rlib-mail/build.gradle +++ b/rlib-mail/build.gradle @@ -1,10 +1,10 @@ dependencies { - api projects.rlibCommon - api libs.javax.mail + api projects.rlibCommon + api libs.javax.mail - testImplementation projects.rlibTestcontainers + testImplementation projects.rlibTestcontainers } jar { - baseName "rlib.mail" + archiveBaseName.set('rlib.mail') } \ No newline at end of file diff --git a/rlib-network/build.gradle b/rlib-network/build.gradle index 6d82232f..e36374dd 100644 --- a/rlib-network/build.gradle +++ b/rlib-network/build.gradle @@ -1,9 +1,10 @@ -jar { - baseName "rlib.network" +dependencies { + api projects.rlibCommon + api libs.project.reactor.core + testRuntimeOnly projects.rlibLoggerImpl } -dependencies { - api projects.rlibCommon - api libs.project.reactor.core - testRuntimeOnly projects.rlibLoggerImpl +jar { + archiveBaseName.set('rlib.network') } + diff --git a/rlib-testcontainers/build.gradle b/rlib-testcontainers/build.gradle index 40e033ef..b93be804 100644 --- a/rlib-testcontainers/build.gradle +++ b/rlib-testcontainers/build.gradle @@ -1,16 +1,16 @@ dependencies { - api projects.rlibCommon - api libs.testcontainers - api libs.slf4j.api - api libs.slf4j.ext - // FIXME - api "com.kohlschutter.junixsocket:junixsocket-common:2.1.1" - api "com.kohlschutter.junixsocket:junixsocket-native-common:2.1.1" - implementation libs.slf4j.simple + api projects.rlibCommon + api libs.testcontainers + api libs.slf4j.api + api libs.slf4j.ext + // FIXME + api "com.kohlschutter.junixsocket:junixsocket-common:2.1.1" + api "com.kohlschutter.junixsocket:junixsocket-native-common:2.1.1" + implementation libs.slf4j.simple - testImplementation projects.rlibMail + testImplementation projects.rlibMail } jar { - baseName "rlib.testcontainers" + archiveBaseName.set('rlib.testcontainers') } \ No newline at end of file From 5337bb7cd5340326e6dbc823f819b138850ab7c7 Mon Sep 17 00:00:00 2001 From: javasabr Date: Thu, 19 Dec 2024 21:06:09 +0100 Subject: [PATCH 10/13] update dependencies --- gradle/libs.versions.toml | 23 +++++++++++-------- rlib-mail/build.gradle | 2 +- .../UncheckedMessagingException.java | 3 +-- .../mail/sender/impl/JavaxMailSender.java | 15 ++++++++---- 4 files changed, 26 insertions(+), 17 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index b91e460b..59255aca 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,18 +1,19 @@ [versions] # https://mvnrepository.com/artifact/org.slf4j/slf4j-api -slf4j = "1.7.36" +slf4j = "2.0.16" # https://mvnrepository.com/artifact/io.projectreactor/reactor-core -project-reactor = "3.4.19" -# https://mvnrepository.com/artifact/javax.mail/mail -javax-mail = "1.5.0-b01" +project-reactor = "3.7.1" +# https://mvnrepository.com/artifact/jakarta.mail/jakarta.mail-api +jakarta-mail = "2.1.3" +angus-mail = "2.0.3" # https://mvnrepository.com/artifact/org.testcontainers/testcontainers -testcontainers = "1.17.3" +testcontainers = "1.20.4" # https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-engine -junit-jupiter = "5.8.2" +junit-jupiter = "5.11.4" # https://mvnrepository.com/artifact/org.jetbrains/annotations -jetbrains-annotations = "23.0.0" +jetbrains-annotations = "26.0.1" # https://mvnrepository.com/artifact/org.projectlombok/lombok -lombok = "1.18.24" +lombok = "1.18.36" [libraries] project-reactor-core = { module = "io.projectreactor:reactor-core", version.ref = "project-reactor" } @@ -23,8 +24,10 @@ junit-api = { module = "org.junit.jupiter:junit-jupiter-api", version.ref = "jun slf4j-api = { module = "org.slf4j:slf4j-api", version.ref = "slf4j" } slf4j-simple = { module = "org.slf4j:slf4j-simple", version.ref = "slf4j" } slf4j-ext = { module = "org.slf4j:slf4j-ext", version.ref = "slf4j" } -javax-mail = { module = "javax.mail:mail", version.ref = "javax-mail" } +jakarta-mail-api = { module = "jakarta.mail:jakarta.mail-api", version.ref = "jakarta-mail" } +angus-mail = { module = "org.eclipse.angus:angus-mail", version.ref = "angus-mail" } testcontainers = { module = "org.testcontainers:testcontainers", version.ref = "testcontainers" } [bundles] -junit = ["junit-engine", "junit-api"] \ No newline at end of file +junit = ["junit-engine", "junit-api"] +mail = ["jakarta-mail-api", "angus-mail"] \ No newline at end of file diff --git a/rlib-mail/build.gradle b/rlib-mail/build.gradle index 7760edf5..7fb8e2db 100644 --- a/rlib-mail/build.gradle +++ b/rlib-mail/build.gradle @@ -1,6 +1,6 @@ dependencies { api projects.rlibCommon - api libs.javax.mail + api libs.bundles.mail testImplementation projects.rlibTestcontainers } diff --git a/rlib-mail/src/main/java/com/ss/rlib/mail/sender/exception/UncheckedMessagingException.java b/rlib-mail/src/main/java/com/ss/rlib/mail/sender/exception/UncheckedMessagingException.java index 86e09d36..22bad3c8 100644 --- a/rlib-mail/src/main/java/com/ss/rlib/mail/sender/exception/UncheckedMessagingException.java +++ b/rlib-mail/src/main/java/com/ss/rlib/mail/sender/exception/UncheckedMessagingException.java @@ -1,9 +1,8 @@ package com.ss.rlib.mail.sender.exception; +import jakarta.mail.MessagingException; import org.jetbrains.annotations.NotNull; -import javax.mail.MessagingException; - public class UncheckedMessagingException extends RuntimeException { public UncheckedMessagingException(@NotNull MessagingException cause) { diff --git a/rlib-mail/src/main/java/com/ss/rlib/mail/sender/impl/JavaxMailSender.java b/rlib-mail/src/main/java/com/ss/rlib/mail/sender/impl/JavaxMailSender.java index 69141334..e668e0e0 100644 --- a/rlib-mail/src/main/java/com/ss/rlib/mail/sender/impl/JavaxMailSender.java +++ b/rlib-mail/src/main/java/com/ss/rlib/mail/sender/impl/JavaxMailSender.java @@ -6,13 +6,20 @@ import com.ss.rlib.mail.sender.MailSender; import com.ss.rlib.mail.sender.MailSenderConfig; import com.ss.rlib.mail.sender.exception.UncheckedMessagingException; +import jakarta.mail.Authenticator; +import jakarta.mail.MessagingException; +import jakarta.mail.PasswordAuthentication; +import jakarta.mail.Session; +import jakarta.mail.Transport; +import jakarta.mail.internet.AddressException; +import jakarta.mail.internet.InternetAddress; +import jakarta.mail.internet.MimeBodyPart; +import jakarta.mail.internet.MimeMessage; +import jakarta.mail.internet.MimeMultipart; import lombok.Builder; import lombok.Getter; import org.jetbrains.annotations.NotNull; -import javax.mail.*; -import javax.mail.Message.RecipientType; -import javax.mail.internet.*; import java.nio.charset.StandardCharsets; import java.util.Properties; import java.util.concurrent.*; @@ -103,7 +110,7 @@ public void send(@NotNull String email, @NotNull String subject, @NotNull String var message = new MimeMessage(session); message.setFrom(from); - message.setRecipients(RecipientType.TO, InternetAddress.parse(email)); + message.setRecipients(MimeMessage.RecipientType.TO, InternetAddress.parse(email)); message.setSubject(subject, StandardCharsets.UTF_8.name()); var mimeBodyPart = new MimeBodyPart(); From 7a6c0f4bd76823c9d0ed523af833f6a3a114a4b9 Mon Sep 17 00:00:00 2001 From: javasabr Date: Tue, 5 Aug 2025 20:22:04 +0200 Subject: [PATCH 11/13] update java stack and version --- build.gradle | 53 ++++++++++++----------- gradle/libs.versions.toml | 21 ++++++--- gradle/wrapper/gradle-wrapper.jar | Bin 59821 -> 45457 bytes gradle/wrapper/gradle-wrapper.properties | 4 +- gradlew | 49 ++++++++++++++------- gradlew.bat | 41 ++++++++++-------- rlib-common/build.gradle | 4 -- rlib-fx/build.gradle | 4 -- rlib-logger-api/build.gradle | 3 -- rlib-logger-impl/build.gradle | 4 -- rlib-logger-slf4j/build.gradle | 4 -- rlib-mail/build.gradle | 4 -- rlib-network/build.gradle | 5 --- rlib-testcontainers/build.gradle | 4 -- 14 files changed, 100 insertions(+), 100 deletions(-) diff --git a/build.gradle b/build.gradle index 773ea030..748bf7c8 100644 --- a/build.gradle +++ b/build.gradle @@ -1,4 +1,4 @@ -rootProject.version = '9.9.2' +rootProject.version = "9.10.0" group = 'javasabr' allprojects { @@ -11,8 +11,11 @@ allprojects { apply plugin: "java-test-fixtures" apply plugin: 'maven-publish' - sourceCompatibility = JavaVersion.VERSION_17 - targetCompatibility = JavaVersion.VERSION_17 + java { + toolchain { + languageVersion = JavaLanguageVersion.of(21) + } + } javadoc { failOnError = false @@ -20,17 +23,21 @@ allprojects { test { useJUnitPlatform() + failOnNoDiscoveredTests = false } dependencies { compileOnly libs.jetbrains.annotations + compileOnly libs.jspecify compileOnly libs.lombok annotationProcessor libs.lombok testImplementation libs.junit.api testCompileOnly libs.lombok testCompileOnly libs.jetbrains.annotations + testCompileOnly libs.jspecify testRuntimeOnly libs.junit.engine + testRuntimeOnly libs.junit.platform.launcher testAnnotationProcessor libs.lombok } @@ -44,11 +51,7 @@ allprojects { } }*/ - compileJava { - options.encoding = "UTF-8" - } - - compileTestJava { + tasks.withType(JavaCompile).configureEach { options.encoding = "UTF-8" } @@ -56,20 +59,20 @@ allprojects { options.encoding = "UTF-8" } - task sourcesJar(type: Jar, dependsOn: classes) { - afterEvaluate { - getArchiveClassifier().set("sources") - getArchiveBaseName().set(jar.getArchiveBaseName()) - from sourceSets.main.allSource - } + tasks.register("sourcesJar", Jar) { + dependsOn "classes" + group "build" + archiveClassifier = "sources" + archiveBaseName = jar.archiveBaseName + from sourceSets.main.allSource } - task javadocJar(type: Jar, dependsOn: javadoc) { - afterEvaluate { - getArchiveClassifier().set("javadoc") - getArchiveBaseName().set(jar.getArchiveBaseName()) - from sourceSets.main.allSource - } + tasks.register("javadocJar", Jar) { + dependsOn "javadoc" + group "build" + archiveClassifier = "javadoc" + archiveBaseName = jar.archiveBaseName + from sourceSets.main.allSource } publishing { @@ -106,7 +109,7 @@ allprojects { } tasks.register('testJar', Jar) { - getArchiveClassifier().set("test") + archiveClassifier = "test" from sourceSets.test.output } @@ -114,14 +117,12 @@ allprojects { testArtifacts testJar } - tasks.withType(Test).tap { - configureEach { - maxParallelForks = Runtime.runtime.availableProcessors() - } + tasks.withType(Test).configureEach { + maxParallelForks = Runtime.runtime.availableProcessors() } } wrapper { - gradleVersion = '8.11.1' + gradleVersion = '9.0.0' distributionType = Wrapper.DistributionType.ALL } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 59255aca..3d2ed4fc 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,26 +1,33 @@ [versions] # https://mvnrepository.com/artifact/org.slf4j/slf4j-api -slf4j = "2.0.16" +slf4j = "2.0.17" # https://mvnrepository.com/artifact/io.projectreactor/reactor-core -project-reactor = "3.7.1" +project-reactor = "3.7.8" # https://mvnrepository.com/artifact/jakarta.mail/jakarta.mail-api jakarta-mail = "2.1.3" -angus-mail = "2.0.3" +# https://mvnrepository.com/artifact/org.eclipse.angus/angus-mail +angus-mail = "2.0.4" # https://mvnrepository.com/artifact/org.testcontainers/testcontainers -testcontainers = "1.20.4" +testcontainers = "1.21.3" # https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-engine -junit-jupiter = "5.11.4" +junit-jupiter = "5.13.4" # https://mvnrepository.com/artifact/org.jetbrains/annotations -jetbrains-annotations = "26.0.1" +jetbrains-annotations = "26.0.2" # https://mvnrepository.com/artifact/org.projectlombok/lombok -lombok = "1.18.36" +lombok = "1.18.38" +# https://mvnrepository.com/artifact/org.jspecify/jspecify +jspecify = "1.0.0" +# https://mvnrepository.com/artifact/org.junit.platform/junit-platform-launcher +junit-platform-launcher = "1.13.4" [libraries] project-reactor-core = { module = "io.projectreactor:reactor-core", version.ref = "project-reactor" } jetbrains-annotations = { module = "org.jetbrains:annotations", version.ref = "jetbrains-annotations" } +jspecify = { module = "org.jspecify:jspecify", version.ref = "jspecify" } lombok = { module = "org.projectlombok:lombok", version.ref = "lombok" } junit-engine = { module = "org.junit.jupiter:junit-jupiter-engine", version.ref = "junit-jupiter" } junit-api = { module = "org.junit.jupiter:junit-jupiter-api", version.ref = "junit-jupiter" } +junit-platform-launcher = { module = "org.junit.platform:junit-platform-launcher", version.ref = "junit-platform-launcher" } slf4j-api = { module = "org.slf4j:slf4j-api", version.ref = "slf4j" } slf4j-simple = { module = "org.slf4j:slf4j-simple", version.ref = "slf4j" } slf4j-ext = { module = "org.slf4j:slf4j-ext", version.ref = "slf4j" } diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 41d9927a4d4fb3f96a785543079b8df6723c946b..8bdaf60c75ab801e22807dde59e12a8735a34077 100644 GIT binary patch literal 45457 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 c82=K%QXLKFx%@O{wJjEi6Y56o#$)Bpeg literal 59821 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 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 11581996..48b43d35 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.0.0-all.zip +networkTimeout=10000 +validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index 1b6c7873..ef07e016 100755 --- a/gradlew +++ b/gradlew @@ -1,7 +1,7 @@ #!/bin/sh # -# Copyright © 2015-2021 the original authors. +# Copyright © 2015 the original authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -15,6 +15,8 @@ # See the License for the specific language governing permissions and # limitations under the License. # +# SPDX-License-Identifier: Apache-2.0 +# ############################################################################## # @@ -55,7 +57,7 @@ # Darwin, MinGW, and NonStop. # # (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # within the Gradle project. # # You can find Gradle at https://github.com/gradle/gradle/. @@ -80,13 +82,11 @@ do esac done -APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit - -APP_NAME="Gradle" +# This is normally unused +# shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum @@ -114,7 +114,7 @@ case "$( uname )" in #( NONSTOP* ) nonstop=true ;; esac -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar +CLASSPATH="\\\"\\\"" # Determine the Java command to use to start the JVM. @@ -133,22 +133,29 @@ location of your Java installation." fi else JAVACMD=java - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the location of your Java installation." + fi fi # Increase the maximum file descriptors if we can. if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then case $MAX_FD in #( max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 MAX_FD=$( ulimit -H -n ) || warn "Could not query maximum file descriptor limit" esac case $MAX_FD in #( '' | soft) :;; #( *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 ulimit -n "$MAX_FD" || warn "Could not set maximum file descriptor limit to $MAX_FD" esac @@ -193,18 +200,28 @@ if "$cygwin" || "$msys" ; then done fi -# Collect all arguments for the java command; -# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of -# shell script including quotes and variable substitutions, so put them in -# double quotes to make sure that they get re-expanded; and -# * put everything else in single quotes, so that it's not re-expanded. + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. set -- \ "-Dorg.gradle.appname=$APP_BASE_NAME" \ -classpath "$CLASSPATH" \ - org.gradle.wrapper.GradleWrapperMain \ + -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \ "$@" +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + # Use "xargs" to parse quoted args. # # With -n1 it outputs one arg per line, with the quotes and backslashes removed. diff --git a/gradlew.bat b/gradlew.bat index ac1b06f9..5eed7ee8 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -13,8 +13,10 @@ @rem See the License for the specific language governing permissions and @rem limitations under the License. @rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem -@if "%DEBUG%" == "" @echo off +@if "%DEBUG%"=="" @echo off @rem ########################################################################## @rem @rem Gradle startup script for Windows @@ -25,7 +27,8 @@ if "%OS%"=="Windows_NT" setlocal set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% @@ -40,13 +43,13 @@ if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto execute +if %ERRORLEVEL% equ 0 goto execute -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 goto fail @@ -56,32 +59,34 @@ set JAVA_EXE=%JAVA_HOME%/bin/java.exe if exist "%JAVA_EXE%" goto execute -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 goto fail :execute @rem Setup the command line -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar +set CLASSPATH= @rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* :end @rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd +if %ERRORLEVEL% equ 0 goto mainEnd :fail rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% :mainEnd if "%OS%"=="Windows_NT" endlocal diff --git a/rlib-common/build.gradle b/rlib-common/build.gradle index ab1cb739..b3fd7a24 100644 --- a/rlib-common/build.gradle +++ b/rlib-common/build.gradle @@ -1,7 +1,3 @@ dependencies { api projects.rlibLoggerApi } - -jar { - archiveBaseName.set('rlib.common') -} \ No newline at end of file diff --git a/rlib-fx/build.gradle b/rlib-fx/build.gradle index 1a4eac72..e0ac566c 100644 --- a/rlib-fx/build.gradle +++ b/rlib-fx/build.gradle @@ -6,10 +6,6 @@ dependencies { api projects.rlibCommon } -jar { - archiveBaseName.set('rlib.fx') -} - javafx { modules = ['javafx.controls'] version = '17' diff --git a/rlib-logger-api/build.gradle b/rlib-logger-api/build.gradle index fe93df1d..e69de29b 100644 --- a/rlib-logger-api/build.gradle +++ b/rlib-logger-api/build.gradle @@ -1,3 +0,0 @@ -jar { - archiveBaseName.set('rlib.logger.api') -} \ No newline at end of file diff --git a/rlib-logger-impl/build.gradle b/rlib-logger-impl/build.gradle index cb9caf10..05c70c97 100644 --- a/rlib-logger-impl/build.gradle +++ b/rlib-logger-impl/build.gradle @@ -1,7 +1,3 @@ dependencies { api projects.rlibCommon } - -jar { - archiveBaseName.set('rlib.logger.impl') -} \ No newline at end of file diff --git a/rlib-logger-slf4j/build.gradle b/rlib-logger-slf4j/build.gradle index c0979892..1fc24540 100644 --- a/rlib-logger-slf4j/build.gradle +++ b/rlib-logger-slf4j/build.gradle @@ -4,7 +4,3 @@ dependencies { testRuntime libs.slf4j.simple } - -jar { - archiveBaseName.set('rlib.logger.slf4j') -} \ No newline at end of file diff --git a/rlib-mail/build.gradle b/rlib-mail/build.gradle index 7fb8e2db..3f6a80e5 100644 --- a/rlib-mail/build.gradle +++ b/rlib-mail/build.gradle @@ -4,7 +4,3 @@ dependencies { testImplementation projects.rlibTestcontainers } - -jar { - archiveBaseName.set('rlib.mail') -} \ No newline at end of file diff --git a/rlib-network/build.gradle b/rlib-network/build.gradle index e36374dd..bc28de0e 100644 --- a/rlib-network/build.gradle +++ b/rlib-network/build.gradle @@ -3,8 +3,3 @@ dependencies { api libs.project.reactor.core testRuntimeOnly projects.rlibLoggerImpl } - -jar { - archiveBaseName.set('rlib.network') -} - diff --git a/rlib-testcontainers/build.gradle b/rlib-testcontainers/build.gradle index b93be804..c143c6a5 100644 --- a/rlib-testcontainers/build.gradle +++ b/rlib-testcontainers/build.gradle @@ -10,7 +10,3 @@ dependencies { testImplementation projects.rlibMail } - -jar { - archiveBaseName.set('rlib.testcontainers') -} \ No newline at end of file From 389e0057aea789f2104ed77fa461ce88a14c9b1d Mon Sep 17 00:00:00 2001 From: javasabr Date: Tue, 5 Aug 2025 20:38:30 +0200 Subject: [PATCH 12/13] exclude root project from build --- build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index 748bf7c8..f27d09e7 100644 --- a/build.gradle +++ b/build.gradle @@ -1,7 +1,7 @@ -rootProject.version = "9.10.0" +rootProject.version = "9.10.0-test2" group = 'javasabr' -allprojects { +subprojects { repositories { mavenCentral() From 68ca64f68803590ad34b4d67b12024f66acc5992 Mon Sep 17 00:00:00 2001 From: javasabr Date: Wed, 6 Aug 2025 18:02:33 +0200 Subject: [PATCH 13/13] release 9.10.0 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index f27d09e7..984af453 100644 --- a/build.gradle +++ b/build.gradle @@ -1,4 +1,4 @@ -rootProject.version = "9.10.0-test2" +rootProject.version = "9.10.0" group = 'javasabr' subprojects {