From 4e43d1f219d8bbf786a5a03b5a032d8b405c146a Mon Sep 17 00:00:00 2001 From: Dmitry Gusev Date: Mon, 5 Jun 2023 20:10:04 +0100 Subject: [PATCH] Version 3.3.0: Java 17 and Nashorn OpenJDK --- CHANGELOG.md | 6 ++ Dockerfile | 6 +- README.md | 2 +- build.gradle | 76 +++++++++---------- gradle/wrapper/gradle-wrapper.properties | 2 +- src/main/java/com/anjlab/csv2db/Importer.java | 3 +- 6 files changed, 49 insertions(+), 46 deletions(-) create mode 100644 CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..5f4d201 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,6 @@ +Version 3.3.0 +============= +- Upgrade build to Gradle 8.1.1 +- Use [Nashorn OpenJDK](https://github.com/openjdk/nashorn) instead of Java's built-in Nashorn which is deprecated +- Upgrade Dockerfile to Java 17 (Amazon Corretto 17 on Amazon Linux 2023) +- Fix a regression in Java 11+ where the `emit` function was evaluated as `null` \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 921c8cb..1dc29bb 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,6 @@ -FROM openjdk:8-jdk as builder +FROM amazoncorretto:17-al2023-jdk as builder -RUN apt-get -qq update && apt-get install -y \ +RUN yum update -y && yum install -y \ git RUN mkdir /tmp/csv2db @@ -9,7 +9,7 @@ COPY . . RUN ./gradlew clean build -FROM openjdk:8-jre +FROM amazoncorretto:17-al2023-jdk RUN mkdir -p /usr/share/csv2db COPY --from=builder /tmp/csv2db/build/libs/* /usr/share/csv2db/ diff --git a/README.md b/README.md index 492f3ef..e84c471 100644 --- a/README.md +++ b/README.md @@ -142,7 +142,7 @@ CompanyName, CompanyNumber,RegAddress.CareOf,RegAddress.POBox,RegAddress.Address #### functions.js -Since version 2.2.0 csv2db will use [Nashorn JavaScript engine](http://openjdk.java.net/projects/nashorn/) (built-in to Java 8+) and fallback to [Rhino](https://www.mozilla.org/rhino/) if running on Java 7 and below. There's no switch to control this behavior. +Version 3.3.0 uses [Nashorn OpenJDK](https://github.com/openjdk/nashorn). Older versions used [Rhino](https://www.mozilla.org/rhino/) on Java 7 and below, this configuration is not supported anymore. Note: Nashorn is not a drop-in replacement for Rhino, so some things may stop working. diff --git a/build.gradle b/build.gradle index 4529add..692f22c 100644 --- a/build.gradle +++ b/build.gradle @@ -1,12 +1,16 @@ import com.bmuschko.gradle.docker.tasks.image.DockerBuildImage +import org.gradle.internal.jvm.Jvm + +repositories { + mavenCentral() +} buildscript { repositories { - jcenter() + gradlePluginPortal() } - dependencies { - classpath 'com.bmuschko:gradle-docker-plugin:3.0.11' + classpath 'com.bmuschko:gradle-docker-plugin:9.3.1' } } @@ -14,15 +18,14 @@ allprojects { apply plugin: 'eclipse' group = 'com.anjlab' - version = '3.2.8' + version = '3.3.0' } apply plugin: 'java' -apply plugin: 'maven' -def javaVersion = org.gradle.internal.jvm.Jvm.current().javaVersion +def javaVersion = Jvm.current().javaVersion -sourceCompatibility = javaVersion.java8Compatible ? javaVersion.name : 1.7 +sourceCompatibility = javaVersion.java8Compatible ? javaVersion : 1.7 targetCompatibility = sourceCompatibility println "Building for Java ${targetCompatibility}" @@ -30,47 +33,40 @@ println "Building for Java ${targetCompatibility}" [compileJava, compileTestJava]*.options*.encoding = 'UTF-8' dependencies { - testCompile 'junit:junit:4.8.2' - testCompile 'org.apache.derby:derby:10.9.1.0' - testCompile 'org.postgresql:postgresql:9.+' - - compile 'net.sf.opencsv:opencsv:2.3' - compile 'commons-cli:commons-cli:1.2' - compile 'commons-io:commons-io:2.4' - compile 'com.google.code.gson:gson:2.2.2' - compile 'org.apache.commons:commons-lang3:3.1' - compile 'io.dropwizard.metrics:metrics-core:3.1.2' - compile 'org.apache.commons:commons-compress:1.10' - - runtime 'commons-codec:commons-codec:1.10' - runtime 'joda-time:joda-time:2.9.9' -} + testImplementation 'junit:junit:4.13.1' + testImplementation 'org.apache.derby:derby:10.14.2.0' + testImplementation 'org.postgresql:postgresql:42.6.0' -repositories { - mavenLocal() - mavenCentral() -} + if (!project.hasProperty("jdbcDriver")) { + ext.jdbcDriver = 'org.postgresql:postgresql:42.6.0' + } -task downloadJdbcDriver { - doLast { - dependencies { - if (!project.hasProperty("jdbcDriver")) { - ext.jdbcDriver = 'org.postgresql:postgresql:9.+' - } + implementation jdbcDriver - runtime jdbcDriver - } - } + implementation 'net.sf.opencsv:opencsv:2.3' + implementation 'commons-cli:commons-cli:1.2' + implementation 'commons-io:commons-io:2.7' + implementation 'com.google.code.gson:gson:2.8.9' + implementation 'org.apache.commons:commons-lang3:3.1' + implementation 'io.dropwizard.metrics:metrics-core:3.1.2' + implementation 'org.apache.commons:commons-compress:1.21' + + implementation 'commons-codec:commons-codec:1.13' + implementation 'joda-time:joda-time:2.9.9' + + implementation 'org.openjdk.nashorn:nashorn-core:15.4' } +tasks.register('downloadJdbcDriver') + classes.dependsOn downloadJdbcDriver -task copyDeps(type: Copy) { +tasks.register('copyDeps', Copy) { into "$buildDir/libs/lib" - from configurations.runtime + from configurations.runtimeClasspath } -task copyShellScripts(type: Copy) { +tasks.register('copyShellScripts', Copy) { into "$buildDir/libs" from 'src/main/shell' } @@ -80,7 +76,7 @@ jar { dependsOn copyDeps, copyShellScripts } apply plugin: 'com.bmuschko.docker-remote-api' -task dockerBuildImage(type: DockerBuildImage) { +tasks.register('dockerBuildImage', DockerBuildImage) { inputDir = projectDir - tags = [ 'anjlab/csv2db:latest', 'anjlab/csv2db:' + version ] + images.addAll(['anjlab/csv2db:latest', 'anjlab/csv2db:' + version]) } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 2ab448e..5810405 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.0.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.1.1-all.zip diff --git a/src/main/java/com/anjlab/csv2db/Importer.java b/src/main/java/com/anjlab/csv2db/Importer.java index da4702c..103a02e 100644 --- a/src/main/java/com/anjlab/csv2db/Importer.java +++ b/src/main/java/com/anjlab/csv2db/Importer.java @@ -242,7 +242,8 @@ private Runnable createConsumer(final Mediator mediator, final int threadId) StringBuilder emitFunctionDeclaration = new StringBuilder() .append("function ").append(threadLocalEmit).append("(nameValues) {") .append(threadLocalStrategy).append(".handleRecord(nameValues);") - .append("}"); + .append("};") + .append(threadLocalEmit); try {