diff --git a/benchmark/build.gradle b/benchmark/build.gradle index 78965f6..3581a2f 100644 --- a/benchmark/build.gradle +++ b/benchmark/build.gradle @@ -1,3 +1,4 @@ +import net.woggioni.gradle.graalvm.NativeImageConfigurationTask import net.woggioni.gradle.graalvm.NativeImageTask import net.woggioni.gradle.graalvm.NativeImagePlugin @@ -16,8 +17,17 @@ dependencies { implementation project(':') } -nativeImage { - mainClass = 'net.woggioni.jwo.benchmark.Main' +Property mainModuleName = objects.property(String.class) +mainModuleName.set('net.woggioni.jwo') +Property mainClassName = objects.property(String.class) +mainClassName.set('net.woggioni.jwo.benchmark.Main') + +tasks.named(NativeImagePlugin.CONFIGURE_NATIVE_IMAGE_TASK_NAME, NativeImageConfigurationTask) { + mainClass = mainClassName +} + +tasks.named(NativeImagePlugin.NATIVE_IMAGE_TASK_NAME, NativeImageTask) { useMusl = true buildStaticImage = true + mainClass = mainClassName } diff --git a/build.gradle b/build.gradle index 0a20713..b13c824 100644 --- a/build.gradle +++ b/build.gradle @@ -2,7 +2,6 @@ plugins { id 'java-library' id 'maven-publish' id 'jacoco' - alias(catalog.plugins.multi.release.jar) alias(catalog.plugins.lombok) alias(catalog.plugins.sambal) } @@ -24,6 +23,7 @@ allprojects { languageVersion = JavaLanguageVersion.of(21) vendor = JvmVendorSpec.ORACLE } + modularity.inferModulePath = true } dependencies { @@ -63,7 +63,6 @@ allprojects { pluginManager.withPlugin('java-library') { java { - withJavadocJar() withSourcesJar() } } @@ -115,7 +114,7 @@ dependencies { } compileJava { - options.release = 8 + options.release = 11 options.compilerArgs << '-parameters' } diff --git a/gradle.properties b/gradle.properties index 6bdcb7a..7babd6e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,6 +3,6 @@ org.gradle.parallel=true org.gradle.caching=true gitea.maven.url = https://gitea.woggioni.net/api/packages/woggioni/maven -jwo.version = 2025.02.25 -lys.version = 2025.02.25 +jwo.version = 2025.04.19 +lys.version = 2025.04.16 guice.version = 5.0.1 diff --git a/jmath-benchmark/build.gradle b/jmath-benchmark/build.gradle index 91e6a4a..dd18e9e 100644 --- a/jmath-benchmark/build.gradle +++ b/jmath-benchmark/build.gradle @@ -1,5 +1,6 @@ import net.woggioni.gradle.graalvm.NativeImagePlugin import net.woggioni.gradle.graalvm.NativeImageTask +import net.woggioni.gradle.graalvm.NativeImageConfigurationTask plugins { id 'java-library' @@ -16,13 +17,17 @@ dependencies { implementation project(':jmath') } -nativeImage { - mainClass = 'net.woggioni.jmath.benchmark.Main' - useMusl = true - buildStaticImage = true -} +Property mainClassName = objects.property(String.class) +mainClassName.set('net.woggioni.jmath.benchmark.Main') -configureNativeImage { + +tasks.named(NativeImagePlugin.CONFIGURE_NATIVE_IMAGE_TASK_NAME, NativeImageConfigurationTask) { + mainClass = mainClassName args('20') } +tasks.named(NativeImagePlugin.NATIVE_IMAGE_TASK_NAME, NativeImageTask) { + useMusl = true + buildStaticImage = true + mainClass = mainClassName +} diff --git a/src/main/java9/module-info.java b/src/main/java/module-info.java similarity index 100% rename from src/main/java9/module-info.java rename to src/main/java/module-info.java diff --git a/src/main/java/net/woggioni/jwo/Hash.java b/src/main/java/net/woggioni/jwo/Hash.java index 0e48cb0..85cf7b1 100644 --- a/src/main/java/net/woggioni/jwo/Hash.java +++ b/src/main/java/net/woggioni/jwo/Hash.java @@ -90,7 +90,36 @@ public class Hash { return new String(hexChars); } + private static int charToInt(char c) { + if (c >= '0' && c <= '9') { + return c - '0'; + } else if(c >= 'a' && c <= 'f') { + return 10 + c - 'a'; + } else if(c >= 'A' && c <= 'F') { + return 10 + c - 'A'; + } else { + throw newThrowable(IllegalArgumentException.class, "Illegal hex character '%c'", c); + } + } + public static byte[] hexToBytes(String hexString) { + if (hexString.length() % 2 != 0) { + throw newThrowable(IllegalArgumentException.class, "Hex string length must be even," + + " string has length '%d' instead", hexString.length()); + } + byte[] result = new byte[hexString.length() / 2]; + for(int i = 0; i < hexString.length(); i++) { + int value = charToInt(hexString.charAt(i)); + if (i % 2 == 0) { + result[i / 2] += (byte) (value << 4); + } else { + result[i / 2] += (byte) value; + } + } + return result; + } + + public static byte[] hexToBytes2(String hexString) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); if (hexString.length() % 2 != 0) { throw newThrowable(IllegalArgumentException.class, "Hex string length must be even," + diff --git a/src/main/java/net/woggioni/jwo/JWO.java b/src/main/java/net/woggioni/jwo/JWO.java index de0a407..09ef869 100644 --- a/src/main/java/net/woggioni/jwo/JWO.java +++ b/src/main/java/net/woggioni/jwo/JWO.java @@ -237,6 +237,10 @@ public class JWO { return Hash.bytesToHex(bytes); } + public static byte[] hexToBytes(String hexStr) { + return Hash.hexToBytes(hexStr); + } + @SneakyThrows public static void deletePath(Path path) { Files.walk(path) diff --git a/src/main/java9/net/woggioni/jwo/url/jpms/Handler.java b/src/main/java/net/woggioni/jwo/url/jpms/Handler.java similarity index 100% rename from src/main/java9/net/woggioni/jwo/url/jpms/Handler.java rename to src/main/java/net/woggioni/jwo/url/jpms/Handler.java diff --git a/src/test/java/net/woggioni/jwo/HashTest.java b/src/test/java/net/woggioni/jwo/HashTest.java index f0fd53b..239856c 100644 --- a/src/test/java/net/woggioni/jwo/HashTest.java +++ b/src/test/java/net/woggioni/jwo/HashTest.java @@ -65,6 +65,7 @@ public class HashTest { ); } } + @ArgumentsSource(HexTestArguments.class) @ParameterizedTest public void hexTest(String sourceString, Class t) { @@ -78,4 +79,18 @@ public class HashTest { Assertions.assertEquals(sourceString.toUpperCase(), Hash.bytesToHex(bytes)); } } + + @ArgumentsSource(HexTestArguments.class) + @ParameterizedTest + public void hexTest2(String sourceString, Class t) { + if(t != null) { + Assertions.assertThrows(t, () -> + Hash.hexToBytes2(sourceString) + ); + } else { + byte[] bytes = Hash.hexToBytes2(sourceString); + Assertions.assertEquals(sourceString.length() / 2, bytes.length); + Assertions.assertEquals(sourceString.toUpperCase(), Hash.bytesToHex(bytes)); + } + } } diff --git a/src/test/java/net/woggioni/jwo/JavaVersionTest.java b/src/test/java/net/woggioni/jwo/JavaVersionTest.java index 9f99b30..d3d3a91 100644 --- a/src/test/java/net/woggioni/jwo/JavaVersionTest.java +++ b/src/test/java/net/woggioni/jwo/JavaVersionTest.java @@ -82,7 +82,7 @@ public class JavaVersionTest { JWO.copy(is, baos); } final var jwoClassVersion = JavaVersion.forClass(baos.toByteArray()); - assertEquals(JavaVersion.VERSION_1_8, jwoClassVersion); + assertEquals(JavaVersion.VERSION_11, jwoClassVersion); } } }