Browse Source

Update Undertow (#7465)

Update Java, Maven, and library dependencies to latest versions.

Use a couple of new Java language features.

Avoid making a fat jar file with maven-shade-plugin, use the jars as
they are.
Michael Hixson 3 years ago
parent
commit
5f9f6523f9

+ 38 - 36
frameworks/Java/undertow/pom.xml

@@ -11,21 +11,18 @@
   <version>1.0-SNAPSHOT</version>
 
   <properties>
-    <maven.compiler.source>11</maven.compiler.source>
-    <maven.compiler.target>11</maven.compiler.target>
+    <maven.compiler.release>18</maven.compiler.release>
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-    <hikaricp.version>3.4.1</hikaricp.version>
-    <jackson.version>2.12.6.1</jackson.version>
-    <maven-shade-plugin.version>3.2.1</maven-shade-plugin.version>
-    <mustache.version>0.9.6</mustache.version>
-    <postgresql.version>42.3.3</postgresql.version>
-    <undertow.version>2.2.11.Final</undertow.version>
+    <hikaricp.version>5.0.1</hikaricp.version>
+    <jackson.version>2.13.3</jackson.version>
+    <maven-compiler-plugin.version>3.10.1</maven-compiler-plugin.version>
+    <maven-dependency-plugin.version>3.3.0</maven-dependency-plugin.version>
+    <maven-jar-plugin.version>3.2.2</maven-jar-plugin.version>
+    <mustache.version>0.9.10</mustache.version>
+    <postgresql.version>42.4.0</postgresql.version>
+    <undertow.version>2.2.18.Final</undertow.version>
   </properties>
 
-  <prerequisites>
-    <maven>3.6</maven>
-  </prerequisites>
-
   <dependencies>
     <dependency>
       <groupId>io.undertow</groupId>
@@ -55,43 +52,48 @@
   </dependencies>
 
   <build>
-    <finalName>app</finalName>
+    <pluginManagement>
+      <plugins>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-compiler-plugin</artifactId>
+          <version>3.10.1</version>
+        </plugin>
+      </plugins>
+    </pluginManagement>
     <plugins>
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-shade-plugin</artifactId>
-        <version>${maven-shade-plugin.version}</version>
-        <configuration>
-          <createDependencyReducedPom>false</createDependencyReducedPom>
-          <filters>
-            <filter>
-              <artifact>*:*</artifact>
-              <excludes>
-                <exclude>module-info.class</exclude>
-                <exclude>META-INF/*.SF</exclude>
-                <exclude>META-INF/*.DSA</exclude>
-                <exclude>META-INF/*.RSA</exclude>
-              </excludes>
-            </filter>
-          </filters>
-        </configuration>
+        <artifactId>maven-dependency-plugin</artifactId>
+        <version>${maven-dependency-plugin.version}</version>
         <executions>
           <execution>
             <phase>package</phase>
             <goals>
-              <goal>shade</goal>
+              <goal>copy-dependencies</goal>
             </goals>
             <configuration>
-              <transformers>
-                <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
-                <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
-                  <mainClass>hello.HelloWebServer</mainClass>
-                </transformer>
-              </transformers>
+              <includeScope>runtime</includeScope>
+              <outputDirectory>${project.build.directory}/lib</outputDirectory>
             </configuration>
           </execution>
         </executions>
       </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-jar-plugin</artifactId>
+        <version>${maven-jar-plugin.version}</version>
+        <configuration>
+          <finalName>app</finalName>
+          <archive>
+            <manifest>
+              <addClasspath>true</addClasspath>
+              <classpathPrefix>lib/</classpathPrefix>
+              <mainClass>hello.HelloWebServer</mainClass>
+            </manifest>
+          </archive>
+        </configuration>
+      </plugin>
     </plugins>
   </build>
 

+ 9 - 14
frameworks/Java/undertow/src/main/java/hello/HelloWebServer.java

@@ -54,11 +54,10 @@ public final class HelloWebServer {
   }
 
   static HttpHandler pathHandler(Mode mode) {
-    switch (mode) {
-      case NO_DATABASE: return noDatabasePathHandler();
-      case POSTGRESQL:  return postgresqlPathHandler();
-    }
-    throw new AssertionError(mode);
+    return switch (mode) {
+      case NO_DATABASE -> noDatabasePathHandler();
+      case POSTGRESQL -> postgresqlPathHandler();
+    };
   }
 
   static HttpHandler noDatabasePathHandler() {
@@ -267,19 +266,15 @@ public final class HelloWebServer {
 
   private static final ObjectMapper objectMapper = new ObjectMapper();
 
-  public static final class Fortune {
-    public final int id;
-    public final String message;
-
-    public Fortune(int id, String message) {
-      this.id = id;
-      this.message = Objects.requireNonNull(message);
+  public record Fortune(int id, String message) {
+    public Fortune {
+      Objects.requireNonNull(message);
     }
   }
 
   public static final class World {
-    public int id;
-    public int randomNumber;
+    public final int id;
+    public int randomNumber; // non-final, so this class can't be a record
 
     public World(int id, int randomNumber) {
       this.id = id;

+ 5 - 4
frameworks/Java/undertow/undertow-postgresql.dockerfile

@@ -1,12 +1,13 @@
-FROM maven:3.6.1-jdk-11-slim as maven
+FROM maven:3.8.6-openjdk-18 as maven
 WORKDIR /undertow
-COPY pom.xml pom.xml
+COPY pom.xml .
 COPY src src
 RUN mvn package -q
 
-FROM openjdk:11.0.3-jdk-slim
+FROM openjdk:18
 WORKDIR /undertow
-COPY --from=maven /undertow/target/app.jar app.jar
+COPY --from=maven /undertow/target/lib lib
+COPY --from=maven /undertow/target/app.jar .
 
 EXPOSE 8080
 

+ 5 - 4
frameworks/Java/undertow/undertow.dockerfile

@@ -1,12 +1,13 @@
-FROM maven:3.6.1-jdk-11-slim as maven
+FROM maven:3.8.6-openjdk-18 as maven
 WORKDIR /undertow
-COPY pom.xml pom.xml
+COPY pom.xml .
 COPY src src
 RUN mvn package -q
 
-FROM openjdk:11.0.3-jdk-slim
+FROM openjdk:18
 WORKDIR /undertow
-COPY --from=maven /undertow/target/app.jar app.jar
+COPY --from=maven /undertow/target/lib lib
+COPY --from=maven /undertow/target/app.jar .
 
 EXPOSE 8080