From 5eeff2f6ba1cdd0e9ce922589ea805abb6a51486 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Iv=C3=A1n=20L=C3=B3pez?= Date: Tue, 13 Jul 2021 10:37:22 +0200 Subject: [PATCH 01/10] Upgrade to Micronaut 2.5.8 --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index c3f9df30..e310a8fe 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ projectVersion=2.1.1.BUILD-SNAPSHOT micronautDocsVersion=1.0.24 -micronautVersion=2.1.4 +micronautVersion=2.5.8 micronautTestVersion=2.2.1 micronautBuildVersion=1.1.5 From 6454421912c402455b0a60ecb32cb6fc82a1ae73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Iv=C3=A1n=20L=C3=B3pez?= Date: Tue, 13 Jul 2021 10:37:39 +0200 Subject: [PATCH 02/10] Upgrade Micronaut Test 2.3.6 --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index e310a8fe..4b8eec95 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,7 +1,7 @@ projectVersion=2.1.1.BUILD-SNAPSHOT micronautDocsVersion=1.0.24 micronautVersion=2.5.8 -micronautTestVersion=2.2.1 +micronautTestVersion=2.3.6 micronautBuildVersion=1.1.5 groovyVersion=3.0.5 From 63108d2f97eb3b126aeeea66e194dcbdf6b8fcdd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Iv=C3=A1n=20L=C3=B3pez?= Date: Tue, 13 Jul 2021 10:37:51 +0200 Subject: [PATCH 03/10] Upgrade Groovy and Spock --- gradle.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle.properties b/gradle.properties index 4b8eec95..fea9f112 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,8 +4,8 @@ micronautVersion=2.5.8 micronautTestVersion=2.3.6 micronautBuildVersion=1.1.5 -groovyVersion=3.0.5 -spockVersion=2.0-M3-groovy-3.0 +groovyVersion=3.0.8 +spockVersion=2.0-groovy-3.0 acmeVersion=2.10 objenesisVersion=3.1 htmlSanityCheckVersion=0.9.7 From 8bc943b64e560cda477136ca71cf40e46dfe9912 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Iv=C3=A1n=20L=C3=B3pez?= Date: Tue, 13 Jul 2021 10:47:46 +0200 Subject: [PATCH 04/10] Upgrade Gradle to 7.1.1 --- acme/build.gradle | 2 +- build.gradle | 8 ++--- examples/examples.gradle | 45 ------------------------ examples/hello-world-acme/build.gradle | 39 +++++++++++++++++++- gradle.properties | 4 +-- gradle/wrapper/gradle-wrapper.properties | 2 +- 6 files changed, 46 insertions(+), 54 deletions(-) delete mode 100644 examples/examples.gradle diff --git a/acme/build.gradle b/acme/build.gradle index 73823150..51d0bd65 100644 --- a/acme/build.gradle +++ b/acme/build.gradle @@ -15,7 +15,7 @@ dependencies { documentation "org.codehaus.groovy:groovy-templates:${groovyVersion}" documentation "org.codehaus.groovy:groovy-dateutil:${groovyVersion}" - implementation group: 'io.netty', name: 'netty-tcnative-boringssl-static', version: '2.0.40.Final' + implementation "io.netty:netty-tcnative-boringssl-static:$tcnativeBoringsslStatic" testImplementation "org.testcontainers:spock:1.15.3" testImplementation("io.micronaut:micronaut-http-client") diff --git a/build.gradle b/build.gradle index 64b37660..27c1f0e0 100644 --- a/build.gradle +++ b/build.gradle @@ -1,10 +1,10 @@ buildscript { repositories { - maven { url "https://repo.grails.org/grails/core" } + mavenCentral() + gradlePluginPortal() } dependencies { - classpath "io.micronaut.build.internal:micronaut-gradle-plugins:3.0.1" - classpath 'com.github.jengelman.gradle.plugins:shadow:6.1.0' + classpath "io.micronaut.build.internal:micronaut-gradle-plugins:4.0.0" } } @@ -21,4 +21,4 @@ apply plugin: "io.micronaut.build.internal.dependency-updates" task buildScriptDependencies(type: DependencyReportTask) { configurations = project.buildscript.configurations -} \ No newline at end of file +} diff --git a/examples/examples.gradle b/examples/examples.gradle deleted file mode 100644 index cfc452e7..00000000 --- a/examples/examples.gradle +++ /dev/null @@ -1,45 +0,0 @@ -apply plugin: "application" -apply plugin: "java" -apply plugin: "com.github.johnrengelman.shadow" - -group "io.micronaut.example" -version project.projectVersion - -repositories { - jcenter() - mavenCentral() - mavenLocal() - maven { url "https://oss.jfrog.org/oss-snapshot-local" } -} - - -dependencies { - annotationProcessor platform("io.micronaut:micronaut-bom:${micronautVersion}") - api platform("io.micronaut:micronaut-bom:${micronautVersion}") - annotationProcessor "io.micronaut:micronaut-inject-java" - implementation(project(":acme")) - implementation("io.micronaut:micronaut-http-client") - implementation("io.micronaut:micronaut-http-server-netty") - implementation("io.micronaut:micronaut-inject") - implementation("io.micronaut:micronaut-runtime") - compileOnly("io.micronaut:micronaut-inject-java") - runtimeOnly("ch.qos.logback:logback-classic:${logbackClassicVersion}") -} - -sourceCompatibility = "1.8" -targetCompatibility = "1.8" - -checkstyleMain.enabled = false -checkstyleTest.enabled = false -mainClassName = "com.acme.example.Application" - -run.jvmArgs("-noverify", "-XX:TieredStopAtLevel=1") - -shadowJar { - mergeServiceFiles() -} - -tasks.withType(JavaCompile) { - options.encoding = "UTF-8" - options.compilerArgs.add("-parameters") -} \ No newline at end of file diff --git a/examples/hello-world-acme/build.gradle b/examples/hello-world-acme/build.gradle index a5024d1d..58923167 100644 --- a/examples/hello-world-acme/build.gradle +++ b/examples/hello-world-acme/build.gradle @@ -1 +1,38 @@ -apply from: "../examples.gradle" +plugins { + id("com.github.johnrengelman.shadow") version "7.0.0" + id("io.micronaut.application") version "1.5.3" +} + +version = "0.1" +group = "io.micronaut.example" + +repositories { + mavenCentral() +} + +micronaut { + runtime("netty") + testRuntime("junit5") + processing { + incremental(true) + annotations("com.example.*") + } +} + +dependencies { + implementation("io.micronaut:micronaut-http-client") + implementation("io.micronaut:micronaut-runtime") + implementation("io.micronaut.acme:micronaut-acme") + implementation("javax.annotation:javax.annotation-api") + implementation("io.micronaut:micronaut-validation") + implementation(project(":acme")) + runtimeOnly("ch.qos.logback:logback-classic") +} + +application { + mainClass.set("com.acme.example.Application") +} +java { + sourceCompatibility = JavaVersion.toVersion("8") + targetCompatibility = JavaVersion.toVersion("8") +} diff --git a/gradle.properties b/gradle.properties index fea9f112..f4c5389b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,8 +1,7 @@ projectVersion=2.1.1.BUILD-SNAPSHOT -micronautDocsVersion=1.0.24 +micronautDocsVersion=2.0.0.RC1 micronautVersion=2.5.8 micronautTestVersion=2.3.6 -micronautBuildVersion=1.1.5 groovyVersion=3.0.8 spockVersion=2.0-groovy-3.0 @@ -10,6 +9,7 @@ acmeVersion=2.10 objenesisVersion=3.1 htmlSanityCheckVersion=0.9.7 logbackClassicVersion=1.2.3 +tcnativeBoringsslStatic=2.0.40.Final cglibVersion=3.3.0 title=Micronaut Acme diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 442d9132..05679dc3 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-6.8.3-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.1.1-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists From 04e41f61a48a111283abcd546e0bb441ac830719 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Iv=C3=A1n=20L=C3=B3pez?= Date: Tue, 13 Jul 2021 10:54:49 +0200 Subject: [PATCH 05/10] Upgrade acme version to 2.12 --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index f4c5389b..d6ef9e1d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -5,7 +5,7 @@ micronautTestVersion=2.3.6 groovyVersion=3.0.8 spockVersion=2.0-groovy-3.0 -acmeVersion=2.10 +acmeVersion=2.12 objenesisVersion=3.1 htmlSanityCheckVersion=0.9.7 logbackClassicVersion=1.2.3 From f2d733b3fd1dfee86c12ab17ba39a3f765177b9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Iv=C3=A1n=20L=C3=B3pez?= Date: Tue, 13 Jul 2021 10:55:02 +0200 Subject: [PATCH 06/10] New major version targeting micronaut 3.0 --- gradle.properties | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/gradle.properties b/gradle.properties index d6ef9e1d..c6d6281f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ -projectVersion=2.1.1.BUILD-SNAPSHOT +projectVersion=3.0.0-SNAPSHOT micronautDocsVersion=2.0.0.RC1 micronautVersion=2.5.8 micronautTestVersion=2.3.6 @@ -7,7 +7,6 @@ groovyVersion=3.0.8 spockVersion=2.0-groovy-3.0 acmeVersion=2.12 objenesisVersion=3.1 -htmlSanityCheckVersion=0.9.7 logbackClassicVersion=1.2.3 tcnativeBoringsslStatic=2.0.40.Final cglibVersion=3.3.0 @@ -18,6 +17,5 @@ projectUrl=http://micronaut.io githubSlug=micronaut-projects/micronaut-acme developers=Nathan Zender -githubBranch=master -githubCoreBranch=2.2.x +githubCoreBranch=3.0.x bomProperty=micronautAcmeVersion From 599082350aed75d07a2072e412cada170d9b6a58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Iv=C3=A1n=20L=C3=B3pez?= Date: Tue, 13 Jul 2021 10:59:23 +0200 Subject: [PATCH 07/10] Use Micronaut nullability annotations --- .../io/micronaut/acme/AcmeConfiguration.java | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/acme/src/main/java/io/micronaut/acme/AcmeConfiguration.java b/acme/src/main/java/io/micronaut/acme/AcmeConfiguration.java index d3ae1df4..0af4dfee 100644 --- a/acme/src/main/java/io/micronaut/acme/AcmeConfiguration.java +++ b/acme/src/main/java/io/micronaut/acme/AcmeConfiguration.java @@ -16,9 +16,9 @@ package io.micronaut.acme; import io.micronaut.context.annotation.ConfigurationProperties; +import io.micronaut.core.annotation.NonNull; import io.micronaut.core.util.Toggleable; -import javax.annotation.Nonnull; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; @@ -77,7 +77,7 @@ public void setEnabled(boolean enabled) { * * @return the domain(s) name configured */ - @Nonnull + @NonNull @NotEmpty @NotNull public List getDomains() { @@ -113,7 +113,7 @@ public void setTosAgree(boolean tosAgree) { * Get the duration in which you would like to renew the certificate within. Default {@value #DEFAULT_RENEW_WITHIN}. * @return the renew within duration */ - @Nonnull + @NonNull public Duration getRenewWitin() { return renewWitin; } @@ -123,7 +123,7 @@ public Duration getRenewWitin() { * * @param renewWitin duration before rene process started */ - public void setRenewWitin(@Nonnull Duration renewWitin) { + public void setRenewWitin(@NonNull Duration renewWitin) { this.renewWitin = renewWitin; } @@ -163,7 +163,7 @@ public void setAuth(AuthConfiguration auth) { * Account key used to authenticate with the ACME server. * @return the account key string */ - @Nonnull + @NonNull @NotBlank @NotNull public String getAccountKey() { @@ -174,7 +174,7 @@ public String getAccountKey() { * Sets the account key used for authentication. * @param accountKey account key string */ - public void setAccountKey(@Nonnull String accountKey) { + public void setAccountKey(@NonNull String accountKey) { this.accountKey = accountKey; } @@ -182,7 +182,7 @@ public void setAccountKey(@Nonnull String accountKey) { * Key in which to be used to generate the CSR which will be used to order the certificate from the ACME server. * @return domain key string value */ - @Nonnull + @NonNull @NotBlank @NotNull public String getDomainKey() { @@ -193,7 +193,7 @@ public String getDomainKey() { * Sets the key string in which to be used to generate the CSR which will be used to order the certificate from the ACME server. * @param domainKey key string */ - public void setDomainKey(@Nonnull String domainKey) { + public void setDomainKey(@NonNull String domainKey) { this.domainKey = domainKey; } @@ -202,7 +202,7 @@ public void setDomainKey(@Nonnull String domainKey) { * * @return location to certificate */ - @Nonnull + @NonNull public File getCertLocation() { return certLocation; } @@ -212,7 +212,7 @@ public File getCertLocation() { * * @param certLocation location to certificate */ - public void setCertLocation(@Nonnull File certLocation) { + public void setCertLocation(@NonNull File certLocation) { this.certLocation = certLocation; } @@ -221,7 +221,7 @@ public void setCertLocation(@Nonnull File certLocation) { * * @return url of the acme server */ - @Nonnull + @NonNull @NotBlank @NotNull public String getAcmeServer() { @@ -233,7 +233,7 @@ public String getAcmeServer() { * * @param acmeServer url of acme server */ - public void setAcmeServer(@Nonnull String acmeServer) { + public void setAcmeServer(@NonNull String acmeServer) { this.acmeServer = acmeServer; } From 40bd2a4a145d6478c0bb4ce8f93348c65948b252 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Iv=C3=A1n=20L=C3=B3pez?= Date: Tue, 13 Jul 2021 11:23:12 +0200 Subject: [PATCH 08/10] Switch to Jakarta annotations --- acme/build.gradle | 1 + .../io/micronaut/acme/background/AcmeCertRefresherTask.java | 2 +- .../src/main/java/io/micronaut/acme/services/AcmeService.java | 4 ++-- .../java/io/micronaut/acme/ssl/AcmeSSLContextBuilder.java | 2 +- 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/acme/build.gradle b/acme/build.gradle index 51d0bd65..7c74fdab 100644 --- a/acme/build.gradle +++ b/acme/build.gradle @@ -8,6 +8,7 @@ dependencies { implementation("io.micronaut:micronaut-http-server") implementation("io.micronaut:micronaut-http-server-netty") implementation("io.micronaut:micronaut-inject") + implementation 'jakarta.inject:jakarta.inject-api:2.0.0' implementation "org.shredzone.acme4j:acme4j-client:${acmeVersion}" implementation "org.shredzone.acme4j:acme4j-utils:${acmeVersion}" diff --git a/acme/src/main/java/io/micronaut/acme/background/AcmeCertRefresherTask.java b/acme/src/main/java/io/micronaut/acme/background/AcmeCertRefresherTask.java index 60fcfcc8..62103c93 100644 --- a/acme/src/main/java/io/micronaut/acme/background/AcmeCertRefresherTask.java +++ b/acme/src/main/java/io/micronaut/acme/background/AcmeCertRefresherTask.java @@ -21,11 +21,11 @@ import io.micronaut.runtime.event.annotation.EventListener; import io.micronaut.runtime.exceptions.ApplicationStartupException; import io.micronaut.scheduling.annotation.Scheduled; +import jakarta.inject.Singleton; import org.shredzone.acme4j.exception.AcmeException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.inject.Singleton; import java.security.cert.X509Certificate; import java.time.Instant; import java.time.temporal.ChronoUnit; diff --git a/acme/src/main/java/io/micronaut/acme/services/AcmeService.java b/acme/src/main/java/io/micronaut/acme/services/AcmeService.java index dcdf2bd2..331e8b23 100644 --- a/acme/src/main/java/io/micronaut/acme/services/AcmeService.java +++ b/acme/src/main/java/io/micronaut/acme/services/AcmeService.java @@ -23,6 +23,8 @@ import io.micronaut.core.io.IOUtils; import io.micronaut.core.io.ResourceResolver; import io.micronaut.scheduling.TaskScheduler; +import jakarta.inject.Named; +import jakarta.inject.Singleton; import org.shredzone.acme4j.*; import org.shredzone.acme4j.challenge.Challenge; import org.shredzone.acme4j.challenge.Dns01Challenge; @@ -36,8 +38,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.inject.Named; -import javax.inject.Singleton; import java.io.*; import java.net.URL; import java.nio.file.Files; diff --git a/acme/src/main/java/io/micronaut/acme/ssl/AcmeSSLContextBuilder.java b/acme/src/main/java/io/micronaut/acme/ssl/AcmeSSLContextBuilder.java index 2223fb7c..8efff2d0 100644 --- a/acme/src/main/java/io/micronaut/acme/ssl/AcmeSSLContextBuilder.java +++ b/acme/src/main/java/io/micronaut/acme/ssl/AcmeSSLContextBuilder.java @@ -22,11 +22,11 @@ import io.micronaut.http.ssl.ServerSslConfiguration; import io.micronaut.runtime.event.annotation.EventListener; import io.netty.handler.ssl.*; +import jakarta.inject.Singleton; import org.shredzone.acme4j.challenge.TlsAlpn01Challenge; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.inject.Singleton; import javax.net.ssl.SSLException; import java.util.Optional; From dab05c2e9bd0dce49a4459a157252429a9bf52d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Iv=C3=A1n=20L=C3=B3pez?= Date: Tue, 13 Jul 2021 11:37:54 +0200 Subject: [PATCH 09/10] Add support for GraalVM Fixes #154 --- .../micronaut-acme/native-image.properties | 17 +++++++++++++++++ .../micronaut-acme/resource-config.json | 5 +++++ 2 files changed, 22 insertions(+) create mode 100644 acme/src/main/resources/META-INF/native-image/io.micronaut.acme/micronaut-acme/native-image.properties create mode 100644 acme/src/main/resources/META-INF/native-image/io.micronaut.acme/micronaut-acme/resource-config.json diff --git a/acme/src/main/resources/META-INF/native-image/io.micronaut.acme/micronaut-acme/native-image.properties b/acme/src/main/resources/META-INF/native-image/io.micronaut.acme/micronaut-acme/native-image.properties new file mode 100644 index 00000000..3e015729 --- /dev/null +++ b/acme/src/main/resources/META-INF/native-image/io.micronaut.acme/micronaut-acme/native-image.properties @@ -0,0 +1,17 @@ +# +# Copyright 2017-2021 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. +# + +Args = --initialize-at-run-time=io.netty.handler.ssl.OpenSsl,io.netty.handler.ssl.OpenSslPrivateKeyMethod,io.netty.internal.tcnative.CertificateVerifier,io.netty.internal.tcnative.SSL,io.netty.internal.tcnative.SSLPrivateKeyMethod \ No newline at end of file diff --git a/acme/src/main/resources/META-INF/native-image/io.micronaut.acme/micronaut-acme/resource-config.json b/acme/src/main/resources/META-INF/native-image/io.micronaut.acme/micronaut-acme/resource-config.json new file mode 100644 index 00000000..d4fab8b9 --- /dev/null +++ b/acme/src/main/resources/META-INF/native-image/io.micronaut.acme/micronaut-acme/resource-config.json @@ -0,0 +1,5 @@ +{ + "resources": [ + { "pattern": "\\Qorg/shredzone/acme4j/version.properties\\E" } + ] +} From 2c81944ceaa536a21a6fe532afb7d1769485ab3b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Iv=C3=A1n=20L=C3=B3pez?= Date: Tue, 13 Jul 2021 12:03:32 +0200 Subject: [PATCH 10/10] Initialize missing class at run-time for GraalVM support --- .../io.micronaut.acme/micronaut-acme/native-image.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/acme/src/main/resources/META-INF/native-image/io.micronaut.acme/micronaut-acme/native-image.properties b/acme/src/main/resources/META-INF/native-image/io.micronaut.acme/micronaut-acme/native-image.properties index 3e015729..b0650f78 100644 --- a/acme/src/main/resources/META-INF/native-image/io.micronaut.acme/micronaut-acme/native-image.properties +++ b/acme/src/main/resources/META-INF/native-image/io.micronaut.acme/micronaut-acme/native-image.properties @@ -14,4 +14,4 @@ # limitations under the License. # -Args = --initialize-at-run-time=io.netty.handler.ssl.OpenSsl,io.netty.handler.ssl.OpenSslPrivateKeyMethod,io.netty.internal.tcnative.CertificateVerifier,io.netty.internal.tcnative.SSL,io.netty.internal.tcnative.SSLPrivateKeyMethod \ No newline at end of file +Args = --initialize-at-run-time=io.netty.handler.ssl.OpenSsl,io.netty.handler.ssl.OpenSslPrivateKeyMethod,io.netty.internal.tcnative.CertificateVerifier,io.netty.internal.tcnative.SSL,io.netty.internal.tcnative.SSLPrivateKeyMethod,io.netty.internal.tcnative.AsyncSSLPrivateKeyMethod \ No newline at end of file