You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by db...@apache.org on 2021/04/21 22:10:39 UTC

[tomee] branch master updated: More aggressively rename datestamped versions to SNAPSHOT

This is an automated email from the ASF dual-hosted git repository.

dblevins pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/tomee.git


The following commit(s) were added to refs/heads/master by this push:
     new 50aca7f  More aggressively rename datestamped versions to SNAPSHOT
     new 2c7ac38  Merge branch 'master' of github.com:apache/tomee
50aca7f is described below

commit 50aca7f187e803ea837fe11e54d335e602fcfbde
Author: David Blevins <da...@gmail.com>
AuthorDate: Wed Apr 21 15:09:51 2021 -0700

    More aggressively rename datestamped versions to SNAPSHOT
---
 tomee/apache-tomee/pom.xml                         |  4 ++
 .../java/org/apache/tomee/installer/Installer.java | 71 ++++++++++++++++++++--
 .../org/apache/tomee/installer/InstallerTest.java  | 38 +++++++++++-
 3 files changed, 106 insertions(+), 7 deletions(-)

diff --git a/tomee/apache-tomee/pom.xml b/tomee/apache-tomee/pom.xml
index 86034dd..c35dea4 100644
--- a/tomee/apache-tomee/pom.xml
+++ b/tomee/apache-tomee/pom.xml
@@ -333,6 +333,7 @@
               <properties>
                 <tomee.workdir>${webprofile.work-dir}</tomee.workdir>
                 <tomee.webapp>tomee-webapp</tomee.webapp>
+                <remove.datestamp>${tomee.version}, ${project.version}, ${cxf.version}</remove.datestamp>
               </properties>
               <source>
                 new commands.SetupCommand(pom: this, log: log, project: project, ant: ant, properties: properties).execute()
@@ -349,6 +350,7 @@
               <properties>
                 <tomee.workdir>${plus.work-dir}</tomee.workdir>
                 <tomee.webapp>tomee-plus-webapp</tomee.webapp>
+                <remove.datestamp>${tomee.version}, ${project.version}, ${cxf.version}</remove.datestamp>
               </properties>
               <source>
                 new commands.SetupCommand(pom: this, log: log, project: project, ant: ant, properties: properties).execute()
@@ -365,6 +367,7 @@
               <properties>
                 <tomee.workdir>${plume.work-dir}</tomee.workdir>
                 <tomee.webapp>tomee-plume-webapp</tomee.webapp>
+                <remove.datestamp>${tomee.version}, ${project.version}, ${cxf.version}</remove.datestamp>
               </properties>
               <source>
                 new commands.SetupCommand(pom: this, log: log, project: project, ant: ant, properties: properties).execute()
@@ -381,6 +384,7 @@
               <properties>
                 <tomee.workdir>${microprofile.work-dir}</tomee.workdir>
                 <tomee.webapp>tomee-microprofile-webapp</tomee.webapp>
+                <remove.datestamp>${tomee.version}, ${project.version}, ${cxf.version}</remove.datestamp>
               </properties>
               <source>
                 new commands.SetupCommand(pom: this, log: log, project: project, ant: ant, properties: properties).execute()
diff --git a/tomee/tomee-common/src/main/java/org/apache/tomee/installer/Installer.java b/tomee/tomee-common/src/main/java/org/apache/tomee/installer/Installer.java
index a6e6ce6..a5e2a60 100644
--- a/tomee/tomee-common/src/main/java/org/apache/tomee/installer/Installer.java
+++ b/tomee/tomee-common/src/main/java/org/apache/tomee/installer/Installer.java
@@ -24,6 +24,7 @@ import java.io.FileWriter;
 import java.io.IOException;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.function.Function;
 import java.util.jar.JarFile;
 
 public class Installer implements InstallerInterface {
@@ -285,7 +286,54 @@ public class Installer implements InstallerInterface {
 */
 
     private void moveLibs() {
-        final String tomeeVersion = System.getProperty("tomee.version");
+
+        /*
+         * When there are several SNAPSHOT versions of a jar available, Maven will often copy
+         * the jar into the assembly as openejb-core-8.0.7-20210418.032600-163.jar rather than
+         * openejb-core-8.0.7-SNAPSHOT.jar.  This breaks our TCK setup which expects it can
+         * point at jars like "lib/openejb-core-$version.jar", where $version is something like
+         * "8.0.7-SNAPSHOT".
+         *
+         * If we see that for any jar containing our version we will rename it from the date
+         * stamped version to the "-SNAPSHOT" version.
+         */
+
+        Function<String, String> normalizeVersion = Function.identity();
+        if (properties.containsKey("remove.datestamp")) {
+            final String removeDatestamp = properties.get("remove.datestamp");
+            final String[] strings = removeDatestamp.split(" *, *");
+            for (final String string : strings) {
+                if (!string.contains("-SNAPSHOT")) continue;
+                normalizeVersion = normalizeVersion.andThen(removeDatestamp(string.trim()));
+            }
+        }
+
+        /*
+         * In TomEE 9 we produce the final server zip by bytecode transforming the classes
+         * so they use jakarta instead of javax.  We do this by inputting the TomEE 8.x
+         * jar and running them through a transformer and creating a new TomEE 9.x zip.
+         *
+         * In this process we also want to rename any libraries from 8.x to 9.x
+         */
+        if (properties.containsKey("rename.version")) {
+            final String renameVersion = properties.get("rename.version");
+
+            final String[] split = renameVersion.split(" *, *");
+            if (split.length != 2) {
+                throw new IllegalStateException("rename.version should be in the form of " +
+                        "'version1, version2' for example '8.0.7, 9.0.0'.  Found '" + renameVersion + "'");
+            }
+
+            final String from = split[0].trim();
+            final String to = split[1].trim();
+
+            normalizeVersion = normalizeVersion
+                    .andThen(removeDatestamp(from))
+                    .andThen(removeDatestamp(to))
+                    .andThen(changeVersion(from, to));
+
+        }
+
 
         final File libs = paths.getCatalinaLibDir();
         final File[] files = paths.getOpenEJBLibDir().listFiles();
@@ -295,7 +343,7 @@ public class Installer implements InstallerInterface {
                     continue;
                 }
 
-                final String name = normalizeVersion(tomeeVersion, file.getName());
+                final String name = normalizeVersion.apply(file.getName());
 
                 if (!name.endsWith(".jar")) {
                     continue;
@@ -315,6 +363,17 @@ public class Installer implements InstallerInterface {
         }
     }
 
+    public static Function<String, String> removeDatestamp(final String version) {
+        return jarName -> removeDatestamp(version, jarName);
+    }
+
+    public static Function<String, String> changeVersion(final String from, final String to) {
+        return jarName -> {
+            if (!jarName.endsWith(from + ".jar")) return jarName;
+            return jarName.replace(from + ".jar", to + ".jar");
+        };
+    }
+
     /**
      * Maven will occasionally give a datestamped version of a snapshot.  Our TCK
      * test harness and likely tooling others have expects the version number to
@@ -326,10 +385,10 @@ public class Installer implements InstallerInterface {
      * If we see any Maven datestamps on our jars where we are expecting SNAPSHOT,
      * rename the jar to the expected "-SNAPSHOT" name.
      */
-    public static String normalizeVersion(final String tomeeVersion, final String jarName) {
-        if (!tomeeVersion.contains("-SNAPSHOT")) return jarName;
+    public static String removeDatestamp(final String version, final String jarName) {
+        if (!version.contains("-SNAPSHOT")) return jarName;
 
-        final String versionNumber = tomeeVersion.replaceAll("-SNAPSHOT", "");
+        final String versionNumber = version.replaceAll("-SNAPSHOT", "");
         if (!jarName.contains(versionNumber)) return jarName;
 
         // Replace 8.0.7-20210418.035728-165 with 8.0.7-SNAPSHOT
@@ -340,7 +399,7 @@ public class Installer implements InstallerInterface {
                 // replace the 'd' with '[0-9]'
                 + "-dddddddd.dddddd-ddd".replace("d", "[0-9]");
 
-        return jarName.replaceAll(regex, tomeeVersion);
+        return jarName.replaceAll(regex, version);
     }
     /*
     private void addJavaeeInEndorsed() {
diff --git a/tomee/tomee-common/src/test/java/org/apache/tomee/installer/InstallerTest.java b/tomee/tomee-common/src/test/java/org/apache/tomee/installer/InstallerTest.java
index 7ccc2df..6e3ce9e 100644
--- a/tomee/tomee-common/src/test/java/org/apache/tomee/installer/InstallerTest.java
+++ b/tomee/tomee-common/src/test/java/org/apache/tomee/installer/InstallerTest.java
@@ -58,8 +58,44 @@ public class InstallerTest {
 
     }
 
+    @Test
+    public void normalizeOddVersion() {
+
+        assertVersion("openejb-api-8.0.7-SNAPSHOT.jar", "openejb-api-8.0.7-20210418.032427-163.jar");
+        assertVersion("openejb-client-8.0.7-SNAPSHOT.jar", "openejb-client-8.0.7-20210418.032621-163.jar");
+        assertVersion("openejb-core-8.0.7-SNAPSHOT.jar", "openejb-core-8.0.7-20210418.032600-163.jar");
+        assertVersion("openejb-core-eclipselink-8.0.7-SNAPSHOT.jar", "openejb-core-eclipselink-8.0.7-20210418.033130-163.jar");
+        assertVersion("openejb-cxf-8.0.7-SNAPSHOT.jar", "openejb-cxf-8.0.7-20210418.032810-163.jar");
+        assertVersion("openejb-cxf-rs-8.0.7-SNAPSHOT.jar", "openejb-cxf-rs-8.0.7-20210418.032736-163.jar");
+        assertVersion("openejb-cxf-transport-8.0.7-SNAPSHOT.jar", "openejb-cxf-transport-8.0.7-20210418.032721-163.jar");
+        assertVersion("openejb-derbynet-8.0.7-SNAPSHOT.jar", "openejb-derbynet-8.0.7-SNAPSHOT.jar");
+        assertVersion("openejb-ejbd-8.0.7-SNAPSHOT.jar", "openejb-ejbd-8.0.7-20210418.032656-163.jar");
+        assertVersion("openejb-hsql-8.0.7-SNAPSHOT.jar", "openejb-hsql-8.0.7-20210418.032814-163.jar");
+        assertVersion("openejb-http-8.0.7-SNAPSHOT.jar", "openejb-http-8.0.7-20210418.032703-163.jar");
+        assertVersion("openejb-javaagent-8.0.7-SNAPSHOT.jar", "openejb-javaagent-8.0.7-20210418.032436-163.jar");
+        assertVersion("openejb-javaagent.jar", "openejb-javaagent.jar");
+        assertVersion("openejb-jee-8.0.7-SNAPSHOT.jar", "openejb-jee-8.0.7-20210418.032447-163.jar");
+        assertVersion("openejb-jee-accessors-8.0.7-SNAPSHOT.jar", "openejb-jee-accessors-8.0.7-20210418.032458-163.jar");
+        assertVersion("openejb-jpa-integration-8.0.7-SNAPSHOT.jar", "openejb-jpa-integration-8.0.7-20210418.032423-164.jar");
+        assertVersion("openejb-loader-8.0.7-SNAPSHOT.jar", "openejb-loader-8.0.7-20210418.032432-163.jar");
+        assertVersion("openejb-rest-8.0.7-SNAPSHOT.jar", "openejb-rest-8.0.7-20210418.032713-163.jar");
+        assertVersion("openejb-server-8.0.7-SNAPSHOT.jar", "openejb-server-8.0.7-20210418.032647-163.jar");
+        assertVersion("openejb-webservices-8.0.7-SNAPSHOT.jar", "openejb-webservices-8.0.7-20210418.032756-163.jar");
+        assertVersion("tomee-catalina-8.0.7-SNAPSHOT.jar", "tomee-catalina-8.0.7-SNAPSHOT.jar");
+        assertVersion("tomee-common-8.0.7-SNAPSHOT.jar", "tomee-common-8.0.7-SNAPSHOT.jar");
+        assertVersion("tomee-config-8.0.7-SNAPSHOT.jar", "tomee-config-8.0.7-20210418.032613-163.jar");
+        assertVersion("tomee-jaxrs-8.0.7-SNAPSHOT.jar", "tomee-jaxrs-8.0.7-SNAPSHOT.jar");
+        assertVersion("tomee-jdbc-8.0.7-SNAPSHOT.jar", "tomee-jdbc-8.0.7-20210418.032642-163.jar");
+        assertVersion("tomee-loader-8.0.7-SNAPSHOT.jar", "tomee-loader-8.0.7-SNAPSHOT.jar");
+        assertVersion("tomee-mojarra-8.0.7-SNAPSHOT.jar", "tomee-mojarra-8.0.7-20210418.032823-163.jar");
+        assertVersion("tomee-plume-webapp-9.0.0-M7-SNAPSHOT.jar", "tomee-plume-webapp-9.0.0-M7-SNAPSHOT.jar");
+        assertVersion("tomee-security-8.0.7-SNAPSHOT.jar", "tomee-security-8.0.7-20210418.033034-163.jar");
+        assertVersion("tomee-webservices-8.0.7-SNAPSHOT.jar", "tomee-webservices-8.0.7-20210418.032838-163.jar");
+
+    }
+
     private static void assertVersion(final String expected, final String jarName) {
-        final String s = Installer.normalizeVersion("8.0.7-SNAPSHOT", jarName);
+        final String s = Installer.removeDatestamp("8.0.7-SNAPSHOT", jarName);
         assertEquals(expected, s);
     }
 }