You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@datasketches.apache.org by dc...@apache.org on 2021/03/23 12:28:51 UTC

[datasketches-memory] 01/01: Introduce maven multi-module configuration

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

dcromberge pushed a commit to branch multi-module-experimental
in repository https://gitbox.apache.org/repos/asf/datasketches-memory.git

commit 57b9bf9c574267cf9250159da938a09d0ff43bf1
Author: David Cromberge <da...@gmail.com>
AuthorDate: Tue Mar 23 12:21:58 2021 +0000

    Introduce maven multi-module configuration
    
    The purpose of this change is to create a release that is usable
    from multilpe Java versions.  This is possible due to the MR-JAR
    format (https://openjdk.java.net/jeps/238).
---
 datasketches-memory-base/pom.xml                   |   81 ++
 .../datasketches/memory/AccessByteBuffer.java      |    0
 .../apache/datasketches/memory/AllocateDirect.java |    4 +-
 .../datasketches/memory/AllocateDirectMap.java     |   54 +-
 .../memory/AllocateDirectWritableMap.java          |    0
 .../memory/BBNonNativeWritableBufferImpl.java      |    0
 .../memory/BBNonNativeWritableMemoryImpl.java      |    0
 .../datasketches/memory/BBWritableBufferImpl.java  |    0
 .../datasketches/memory/BBWritableMemoryImpl.java  |    0
 .../org/apache/datasketches/memory/BaseBuffer.java |    0
 .../org/apache/datasketches/memory/BaseState.java  |    0
 .../memory/BaseWritableBufferImpl.java             |    0
 .../memory/BaseWritableMemoryImpl.java             |    0
 .../org/apache/datasketches/memory/Buffer.java     |    0
 .../apache/datasketches/memory/CompareAndCopy.java |    0
 .../memory/DefaultMemoryRequestServer.java         |    0
 .../memory/DirectNonNativeWritableBufferImpl.java  |    0
 .../memory/DirectNonNativeWritableMemoryImpl.java  |    0
 .../memory/DirectWritableBufferImpl.java           |    0
 .../memory/DirectWritableMemoryImpl.java           |    0
 .../org/apache/datasketches/memory/Handle.java     |    0
 .../memory/HeapNonNativeWritableBufferImpl.java    |    0
 .../memory/HeapNonNativeWritableMemoryImpl.java    |    0
 .../memory/HeapWritableBufferImpl.java             |    0
 .../memory/HeapWritableMemoryImpl.java             |    0
 .../java/org/apache/datasketches/memory/Ints.java  |    0
 .../apache/datasketches/memory/JDK7Compatible.java |    0
 .../java/org/apache/datasketches/memory/Map.java   |    0
 .../org/apache/datasketches/memory/MapHandle.java  |    0
 .../memory/MapNonNativeWritableBufferImpl.java     |    0
 .../memory/MapNonNativeWritableMemoryImpl.java     |    0
 .../datasketches/memory/MapWritableBufferImpl.java |    0
 .../datasketches/memory/MapWritableMemoryImpl.java |    0
 .../org/apache/datasketches/memory/Memory.java     |    0
 .../datasketches/memory/MemoryRequestServer.java   |    0
 .../org/apache/datasketches/memory/NioBits.java    |   20 +-
 .../memory/NonNativeWritableBufferImpl.java        |    0
 .../memory/NonNativeWritableMemoryImpl.java        |    0
 .../java/org/apache/datasketches/memory/Prim.java  |    0
 .../datasketches/memory/ReadOnlyException.java     |    0
 .../apache/datasketches/memory/StepBoolean.java    |    0
 .../org/apache/datasketches/memory/UnsafeUtil.java |    0
 .../java/org/apache/datasketches/memory/Utf8.java  |    0
 .../datasketches/memory/Utf8CodingException.java   |    0
 .../java/org/apache/datasketches/memory/Util.java  |    0
 .../apache/datasketches/memory/WritableBuffer.java |    0
 .../datasketches/memory/WritableBufferImpl.java    |    0
 .../datasketches/memory/WritableDirectHandle.java  |    0
 .../apache/datasketches/memory/WritableHandle.java |    0
 .../apache/datasketches/memory/WritableMap.java    |    0
 .../datasketches/memory/WritableMapHandle.java     |    0
 .../apache/datasketches/memory/WritableMemory.java |    0
 .../datasketches/memory/WritableMemoryImpl.java    |    0
 .../org/apache/datasketches/memory/XxHash64.java   |    0
 .../apache/datasketches/memory/package-info.java   |    0
 .../src}/main/javadoc/overview.html                |    0
 .../memory/AllocateDirectMapMemoryTest.java        |    0
 .../memory/AllocateDirectMemoryTest.java           |    0
 .../AllocateDirectWritableMapMemoryTest.java       |    0
 .../apache/datasketches/memory/BaseBufferTest.java |    0
 .../apache/datasketches/memory/BaseStateTest.java  |    0
 .../apache/datasketches/memory/Buffer2Test.java    |    0
 .../memory/BufferBoundaryCheckTest.java            |    0
 .../datasketches/memory/BufferInvariantsTest.java  |    0
 .../memory/BufferReadWriteSafetyTest.java          |    0
 .../org/apache/datasketches/memory/BufferTest.java |    0
 .../datasketches/memory/CommonBufferTest.java      |    0
 .../datasketches/memory/CommonMemoryTest.java      |    0
 .../datasketches/memory/CopyMemoryOverlapTest.java |    0
 .../apache/datasketches/memory/CopyMemoryTest.java |    0
 .../memory/ExampleMemoryRequestServerTest.java     |    0
 .../memory/IgnoredArrayOverflowTest.java           |    0
 .../datasketches/memory/IsValidUtf8TestUtil.java   |    0
 .../apache/datasketches/memory/LeafImplTest.java   |    0
 .../memory/MemoryBoundaryCheckTest.java            |    0
 .../memory/MemoryReadWriteSafetyTest.java          |    0
 .../org/apache/datasketches/memory/MemoryTest.java |    0
 .../datasketches/memory/MemoryWriteToTest.java     |    0
 .../apache/datasketches/memory/NioBitsTest.java    |    0
 .../memory/NonNativeWritableBufferImplTest.java    |    0
 .../memory/NonNativeWritableMemoryImplTest.java    |    0
 .../datasketches/memory/SpecificLeafTest.java      |    0
 .../apache/datasketches/memory/UnsafeUtilTest.java |    0
 .../org/apache/datasketches/memory/Utf8Test.java   |    0
 .../org/apache/datasketches/memory/UtilTest.java   |    0
 .../memory/WritableBufferImplTest.java             |    0
 .../memory/WritableDirectCopyTest.java             |    0
 .../memory/WritableMemoryImplTest.java             |    0
 .../datasketches/memory/WritableMemoryTest.java    |    0
 .../datasketches/memory/XxHash64LoopingTest.java   |    0
 .../apache/datasketches/memory/XxHash64Test.java   |    0
 .../datasketches/memory/ZeroCapacityTest.java      |    0
 .../src}/test/resources/GettysburgAddress.txt      |    0
 datasketches-memory-java11/pom.xml                 |   97 ++
 .../apache/datasketches/memory/AllocateDirect.java |    5 +-
 .../datasketches/memory/AllocateDirectMap.java     |    2 +-
 .../org/apache/datasketches/memory/NioBits.java    |    8 +-
 .../src}/main/javadoc/overview.html                |    0
 .../datasketches/memory/AllocateDirectTest.java    |   34 +-
 datasketches-memory-multirelease/pom.xml           |   82 ++
 .../src/assembly/mrjar.xml                         |   56 +
 pom.xml                                            | 1318 ++++++++++----------
 102 files changed, 1045 insertions(+), 716 deletions(-)

diff --git a/datasketches-memory-base/pom.xml b/datasketches-memory-base/pom.xml
new file mode 100644
index 0000000..29896c2
--- /dev/null
+++ b/datasketches-memory-base/pom.xml
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one
+  ~ or more contributor license agreements.  See the NOTICE file
+  ~ distributed with this work for additional information
+  ~ regarding copyright ownership.  The ASF licenses this file
+  ~ to you 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
+  ~
+  ~   http://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.
+  -->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
+                             http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>org.apache.datasketches</groupId>
+    <artifactId>datasketches-memory-root</artifactId>
+    <version>1.4.0-SNAPSHOT</version>
+  </parent>
+
+  <artifactId>datasketches-memory-base</artifactId>
+  <name>${project.artifactId}</name>
+
+  <properties>
+    <maven.install.skip>true</maven.install.skip>
+    <maven.compiler.source>8</maven.compiler.source>
+    <maven.compiler.target>8</maven.compiler.target>
+  </properties>
+
+  <dependencies>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>4.12</version>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <pluginManagement>
+      <plugins>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-compiler-plugin</artifactId>
+          <version>3.8.1</version>
+          <configuration>
+            <source>1.8</source>
+            <target>1.8</target>
+            <jdkToolchain>
+              <version>1.8</version>
+            </jdkToolchain>
+          </configuration>
+        </plugin>
+        <plugin>
+          <!-- Apache Parent pom, pluginManagement-->
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-surefire-plugin</artifactId>
+          <version>${maven-surefire-plugin.version}</version>
+          <configuration>
+            <trimStackTrace>false</trimStackTrace>
+            <useManifestOnlyJar>false</useManifestOnlyJar>
+            <redirectTestOutputToFile>true</redirectTestOutputToFile>
+            <jdkToolchain>
+              <version>1.8</version>
+            </jdkToolchain>
+          </configuration>
+        </plugin>
+      </plugins>
+    </pluginManagement>
+  </build>
+
+</project>
diff --git a/src/main/java/org/apache/datasketches/memory/AccessByteBuffer.java b/datasketches-memory-base/src/main/java/org/apache/datasketches/memory/AccessByteBuffer.java
similarity index 100%
rename from src/main/java/org/apache/datasketches/memory/AccessByteBuffer.java
rename to datasketches-memory-base/src/main/java/org/apache/datasketches/memory/AccessByteBuffer.java
diff --git a/src/main/java/org/apache/datasketches/memory/AllocateDirect.java b/datasketches-memory-base/src/main/java/org/apache/datasketches/memory/AllocateDirect.java
similarity index 99%
copy from src/main/java/org/apache/datasketches/memory/AllocateDirect.java
copy to datasketches-memory-base/src/main/java/org/apache/datasketches/memory/AllocateDirect.java
index 805554c..dbbcbfe 100644
--- a/src/main/java/org/apache/datasketches/memory/AllocateDirect.java
+++ b/datasketches-memory-base/src/main/java/org/apache/datasketches/memory/AllocateDirect.java
@@ -136,9 +136,9 @@ final class AllocateDirect implements AutoCloseable {
         BaseState.currentDirectMemoryAllocations_.decrementAndGet();
         BaseState.currentDirectMemoryAllocated_.addAndGet(-capacity);
         return true;
-      } 
+      }
       return false;
     }
   }
 
-}
+}
\ No newline at end of file
diff --git a/src/main/java/org/apache/datasketches/memory/AllocateDirectMap.java b/datasketches-memory-base/src/main/java/org/apache/datasketches/memory/AllocateDirectMap.java
similarity index 85%
copy from src/main/java/org/apache/datasketches/memory/AllocateDirectMap.java
copy to datasketches-memory-base/src/main/java/org/apache/datasketches/memory/AllocateDirectMap.java
index 0dbe16a..b870d74 100644
--- a/src/main/java/org/apache/datasketches/memory/AllocateDirectMap.java
+++ b/datasketches-memory-base/src/main/java/org/apache/datasketches/memory/AllocateDirectMap.java
@@ -71,23 +71,23 @@ class AllocateDirectMap implements Map {
   static {
     try {
       FILE_CHANNEL_IMPL_MAP0_METHOD = FileChannelImpl.class
-          .getDeclaredMethod("map0", int.class, long.class, long.class);
+              .getDeclaredMethod("map0", int.class, long.class, long.class);
       FILE_CHANNEL_IMPL_MAP0_METHOD.setAccessible(true);
 
       FILE_CHANNEL_IMPL_UNMAP0_METHOD = FileChannelImpl.class
-          .getDeclaredMethod("unmap0", long.class, long.class);
+              .getDeclaredMethod("unmap0", long.class, long.class);
       FILE_CHANNEL_IMPL_UNMAP0_METHOD.setAccessible(true);
 
       MAPPED_BYTE_BUFFER_LOAD0_METHOD = MappedByteBuffer.class
-          .getDeclaredMethod("load0", long.class, long.class);
+              .getDeclaredMethod("load0", long.class, long.class);
       MAPPED_BYTE_BUFFER_LOAD0_METHOD.setAccessible(true);
 
       MAPPED_BYTE_BUFFER_ISLOADED0_METHOD = MappedByteBuffer.class
-          .getDeclaredMethod("isLoaded0", long.class, long.class, int.class);
+              .getDeclaredMethod("isLoaded0", long.class, long.class, int.class);
       MAPPED_BYTE_BUFFER_ISLOADED0_METHOD.setAccessible(true);
 
       MAPPED_BYTE_BUFFER_FORCE0_METHOD = MappedByteBuffer.class
-          .getDeclaredMethod("force0", FileDescriptor.class, long.class, long.class);
+              .getDeclaredMethod("force0", FileDescriptor.class, long.class, long.class);
       MAPPED_BYTE_BUFFER_FORCE0_METHOD.setAccessible(true);
     } catch (final Exception e) {
       throw new RuntimeException("Could not reflect static methods: " + e);
@@ -105,15 +105,15 @@ class AllocateDirectMap implements Map {
   //called from AllocateDirectWritableMap constructor
   @SuppressWarnings("resource")
   AllocateDirectMap(final File file, final long fileOffsetBytes, final long capacityBytes,
-      final boolean localReadOnly) {
+                    final boolean localReadOnly) {
     this.capacityBytes = capacityBytes;
     resourceReadOnly = isFileReadOnly(file);
     final long fileLength = file.length();
     if ((localReadOnly || resourceReadOnly) && fileOffsetBytes + capacityBytes > fileLength) {
       throw new IllegalArgumentException(
-          "Read-only mode and requested map length is greater than current file length: "
-          + "Requested Length = " + (fileOffsetBytes + capacityBytes)
-          + ", Current File Length = " + fileLength);
+              "Read-only mode and requested map length is greater than current file length: "
+                      + "Requested Length = " + (fileOffsetBytes + capacityBytes)
+                      + ", Current File Length = " + fileLength);
     }
     raf = mapper(file, fileOffsetBytes, capacityBytes, resourceReadOnly);
     nativeBaseOffset = map(raf.getChannel(), resourceReadOnly, fileOffsetBytes, capacityBytes);
@@ -139,11 +139,11 @@ class AllocateDirectMap implements Map {
     try {
       final int pageCount = NioBits.pageCount(capacityBytes);
       return (boolean) MAPPED_BYTE_BUFFER_ISLOADED0_METHOD
-          //isLoaded0 is effectively static, so ZERO_READ_ONLY_DIRECT_BYTE_BUFFER is not modified
-          .invoke(AccessByteBuffer.ZERO_READ_ONLY_DIRECT_BYTE_BUFFER,
-              nativeBaseOffset,
-              capacityBytes,
-              pageCount);
+              //isLoaded0 is effectively static, so ZERO_READ_ONLY_DIRECT_BYTE_BUFFER is not modified
+              .invoke(AccessByteBuffer.ZERO_READ_ONLY_DIRECT_BYTE_BUFFER,
+                      nativeBaseOffset,
+                      capacityBytes,
+                      pageCount);
     } catch (final Exception e) {
       throw new RuntimeException(
               String.format("Encountered %s exception while loading", e.getClass()));
@@ -163,7 +163,7 @@ class AllocateDirectMap implements Map {
         // because the valid state is already changed.
         cleaner.clean();
         return true;
-      } 
+      }
       return false;
     } finally {
       BaseState.reachabilityFence(this);
@@ -183,19 +183,19 @@ class AllocateDirectMap implements Map {
   private void madvise() {
     try {
       MAPPED_BYTE_BUFFER_LOAD0_METHOD
-        //load0 is effectively static, so ZERO_READ_ONLY_DIRECT_BYTE_BUFFER is not modified
-        .invoke(AccessByteBuffer.ZERO_READ_ONLY_DIRECT_BYTE_BUFFER,
-            nativeBaseOffset,
-            capacityBytes);
+              //load0 is effectively static, so ZERO_READ_ONLY_DIRECT_BYTE_BUFFER is not modified
+              .invoke(AccessByteBuffer.ZERO_READ_ONLY_DIRECT_BYTE_BUFFER,
+                      nativeBaseOffset,
+                      capacityBytes);
     } catch (final Exception e) {
       throw new RuntimeException(
-          String.format("Encountered %s exception while loading", e.getClass()));
+              String.format("Encountered %s exception while loading", e.getClass()));
     }
   }
 
   //Does the actual mapping work, resourceReadOnly must already be set
   private static RandomAccessFile mapper(final File file, final long fileOffset,
-      final long capacityBytes, final boolean resourceReadOnly)  {
+                                         final long capacityBytes, final boolean resourceReadOnly)  {
 
     final String mode = resourceReadOnly ? "r" : "rw";
     final RandomAccessFile raf;
@@ -225,14 +225,14 @@ class AllocateDirectMap implements Map {
    * @throws RuntimeException Encountered an exception while mapping
    */
   private static long map(final FileChannel fileChannel, final boolean resourceReadOnly,
-      final long position, final long lengthBytes) {
+                          final long position, final long lengthBytes) {
     final int pagePosition = (int) (position % unsafe.pageSize());
     final long mapPosition = position - pagePosition;
     final long mapSize = lengthBytes + pagePosition;
     final int mapMode = resourceReadOnly ? MAP_RO : MAP_RW;
     try {
       final long nativeBaseOffset =
-          (long) FILE_CHANNEL_IMPL_MAP0_METHOD.invoke(fileChannel, mapMode, mapPosition, mapSize);
+              (long) FILE_CHANNEL_IMPL_MAP0_METHOD.invoke(fileChannel, mapMode, mapPosition, mapSize);
       return nativeBaseOffset;
     } catch (final InvocationTargetException e) {
       throw new RuntimeException("Exception while mapping", e.getTargetException());
@@ -259,7 +259,7 @@ class AllocateDirectMap implements Map {
     private final StepBoolean valid = new StepBoolean(true); //only place for this
 
     Deallocator(final long nativeBaseOffset, final long capacityBytes,
-        final RandomAccessFile raf) {
+                final RandomAccessFile raf) {
       BaseState.currentDirectMemoryMapAllocations_.incrementAndGet();
       BaseState.currentDirectMemoryMapAllocated_.addAndGet(capacityBytes);
       myRaf = raf;
@@ -294,7 +294,7 @@ class AllocateDirectMap implements Map {
           BaseState.currentDirectMemoryMapAllocated_.addAndGet(-myCapacity);
         }
         return true;
-      } 
+      }
       return false;
     }
 
@@ -308,9 +308,9 @@ class AllocateDirectMap implements Map {
         myRaf.close();
       } catch (final Exception e) {
         throw new RuntimeException(
-            String.format("Encountered %s exception while freeing memory", e.getClass()));
+                String.format("Encountered %s exception while freeing memory", e.getClass()));
       }
     }
   } //End of class Deallocator
 
-}
+}
\ No newline at end of file
diff --git a/src/main/java/org/apache/datasketches/memory/AllocateDirectWritableMap.java b/datasketches-memory-base/src/main/java/org/apache/datasketches/memory/AllocateDirectWritableMap.java
similarity index 100%
rename from src/main/java/org/apache/datasketches/memory/AllocateDirectWritableMap.java
rename to datasketches-memory-base/src/main/java/org/apache/datasketches/memory/AllocateDirectWritableMap.java
diff --git a/src/main/java/org/apache/datasketches/memory/BBNonNativeWritableBufferImpl.java b/datasketches-memory-base/src/main/java/org/apache/datasketches/memory/BBNonNativeWritableBufferImpl.java
similarity index 100%
rename from src/main/java/org/apache/datasketches/memory/BBNonNativeWritableBufferImpl.java
rename to datasketches-memory-base/src/main/java/org/apache/datasketches/memory/BBNonNativeWritableBufferImpl.java
diff --git a/src/main/java/org/apache/datasketches/memory/BBNonNativeWritableMemoryImpl.java b/datasketches-memory-base/src/main/java/org/apache/datasketches/memory/BBNonNativeWritableMemoryImpl.java
similarity index 100%
rename from src/main/java/org/apache/datasketches/memory/BBNonNativeWritableMemoryImpl.java
rename to datasketches-memory-base/src/main/java/org/apache/datasketches/memory/BBNonNativeWritableMemoryImpl.java
diff --git a/src/main/java/org/apache/datasketches/memory/BBWritableBufferImpl.java b/datasketches-memory-base/src/main/java/org/apache/datasketches/memory/BBWritableBufferImpl.java
similarity index 100%
rename from src/main/java/org/apache/datasketches/memory/BBWritableBufferImpl.java
rename to datasketches-memory-base/src/main/java/org/apache/datasketches/memory/BBWritableBufferImpl.java
diff --git a/src/main/java/org/apache/datasketches/memory/BBWritableMemoryImpl.java b/datasketches-memory-base/src/main/java/org/apache/datasketches/memory/BBWritableMemoryImpl.java
similarity index 100%
rename from src/main/java/org/apache/datasketches/memory/BBWritableMemoryImpl.java
rename to datasketches-memory-base/src/main/java/org/apache/datasketches/memory/BBWritableMemoryImpl.java
diff --git a/src/main/java/org/apache/datasketches/memory/BaseBuffer.java b/datasketches-memory-base/src/main/java/org/apache/datasketches/memory/BaseBuffer.java
similarity index 100%
rename from src/main/java/org/apache/datasketches/memory/BaseBuffer.java
rename to datasketches-memory-base/src/main/java/org/apache/datasketches/memory/BaseBuffer.java
diff --git a/src/main/java/org/apache/datasketches/memory/BaseState.java b/datasketches-memory-base/src/main/java/org/apache/datasketches/memory/BaseState.java
similarity index 100%
rename from src/main/java/org/apache/datasketches/memory/BaseState.java
rename to datasketches-memory-base/src/main/java/org/apache/datasketches/memory/BaseState.java
diff --git a/src/main/java/org/apache/datasketches/memory/BaseWritableBufferImpl.java b/datasketches-memory-base/src/main/java/org/apache/datasketches/memory/BaseWritableBufferImpl.java
similarity index 100%
rename from src/main/java/org/apache/datasketches/memory/BaseWritableBufferImpl.java
rename to datasketches-memory-base/src/main/java/org/apache/datasketches/memory/BaseWritableBufferImpl.java
diff --git a/src/main/java/org/apache/datasketches/memory/BaseWritableMemoryImpl.java b/datasketches-memory-base/src/main/java/org/apache/datasketches/memory/BaseWritableMemoryImpl.java
similarity index 100%
rename from src/main/java/org/apache/datasketches/memory/BaseWritableMemoryImpl.java
rename to datasketches-memory-base/src/main/java/org/apache/datasketches/memory/BaseWritableMemoryImpl.java
diff --git a/src/main/java/org/apache/datasketches/memory/Buffer.java b/datasketches-memory-base/src/main/java/org/apache/datasketches/memory/Buffer.java
similarity index 100%
rename from src/main/java/org/apache/datasketches/memory/Buffer.java
rename to datasketches-memory-base/src/main/java/org/apache/datasketches/memory/Buffer.java
diff --git a/src/main/java/org/apache/datasketches/memory/CompareAndCopy.java b/datasketches-memory-base/src/main/java/org/apache/datasketches/memory/CompareAndCopy.java
similarity index 100%
rename from src/main/java/org/apache/datasketches/memory/CompareAndCopy.java
rename to datasketches-memory-base/src/main/java/org/apache/datasketches/memory/CompareAndCopy.java
diff --git a/src/main/java/org/apache/datasketches/memory/DefaultMemoryRequestServer.java b/datasketches-memory-base/src/main/java/org/apache/datasketches/memory/DefaultMemoryRequestServer.java
similarity index 100%
rename from src/main/java/org/apache/datasketches/memory/DefaultMemoryRequestServer.java
rename to datasketches-memory-base/src/main/java/org/apache/datasketches/memory/DefaultMemoryRequestServer.java
diff --git a/src/main/java/org/apache/datasketches/memory/DirectNonNativeWritableBufferImpl.java b/datasketches-memory-base/src/main/java/org/apache/datasketches/memory/DirectNonNativeWritableBufferImpl.java
similarity index 100%
rename from src/main/java/org/apache/datasketches/memory/DirectNonNativeWritableBufferImpl.java
rename to datasketches-memory-base/src/main/java/org/apache/datasketches/memory/DirectNonNativeWritableBufferImpl.java
diff --git a/src/main/java/org/apache/datasketches/memory/DirectNonNativeWritableMemoryImpl.java b/datasketches-memory-base/src/main/java/org/apache/datasketches/memory/DirectNonNativeWritableMemoryImpl.java
similarity index 100%
rename from src/main/java/org/apache/datasketches/memory/DirectNonNativeWritableMemoryImpl.java
rename to datasketches-memory-base/src/main/java/org/apache/datasketches/memory/DirectNonNativeWritableMemoryImpl.java
diff --git a/src/main/java/org/apache/datasketches/memory/DirectWritableBufferImpl.java b/datasketches-memory-base/src/main/java/org/apache/datasketches/memory/DirectWritableBufferImpl.java
similarity index 100%
rename from src/main/java/org/apache/datasketches/memory/DirectWritableBufferImpl.java
rename to datasketches-memory-base/src/main/java/org/apache/datasketches/memory/DirectWritableBufferImpl.java
diff --git a/src/main/java/org/apache/datasketches/memory/DirectWritableMemoryImpl.java b/datasketches-memory-base/src/main/java/org/apache/datasketches/memory/DirectWritableMemoryImpl.java
similarity index 100%
rename from src/main/java/org/apache/datasketches/memory/DirectWritableMemoryImpl.java
rename to datasketches-memory-base/src/main/java/org/apache/datasketches/memory/DirectWritableMemoryImpl.java
diff --git a/src/main/java/org/apache/datasketches/memory/Handle.java b/datasketches-memory-base/src/main/java/org/apache/datasketches/memory/Handle.java
similarity index 100%
rename from src/main/java/org/apache/datasketches/memory/Handle.java
rename to datasketches-memory-base/src/main/java/org/apache/datasketches/memory/Handle.java
diff --git a/src/main/java/org/apache/datasketches/memory/HeapNonNativeWritableBufferImpl.java b/datasketches-memory-base/src/main/java/org/apache/datasketches/memory/HeapNonNativeWritableBufferImpl.java
similarity index 100%
rename from src/main/java/org/apache/datasketches/memory/HeapNonNativeWritableBufferImpl.java
rename to datasketches-memory-base/src/main/java/org/apache/datasketches/memory/HeapNonNativeWritableBufferImpl.java
diff --git a/src/main/java/org/apache/datasketches/memory/HeapNonNativeWritableMemoryImpl.java b/datasketches-memory-base/src/main/java/org/apache/datasketches/memory/HeapNonNativeWritableMemoryImpl.java
similarity index 100%
rename from src/main/java/org/apache/datasketches/memory/HeapNonNativeWritableMemoryImpl.java
rename to datasketches-memory-base/src/main/java/org/apache/datasketches/memory/HeapNonNativeWritableMemoryImpl.java
diff --git a/src/main/java/org/apache/datasketches/memory/HeapWritableBufferImpl.java b/datasketches-memory-base/src/main/java/org/apache/datasketches/memory/HeapWritableBufferImpl.java
similarity index 100%
rename from src/main/java/org/apache/datasketches/memory/HeapWritableBufferImpl.java
rename to datasketches-memory-base/src/main/java/org/apache/datasketches/memory/HeapWritableBufferImpl.java
diff --git a/src/main/java/org/apache/datasketches/memory/HeapWritableMemoryImpl.java b/datasketches-memory-base/src/main/java/org/apache/datasketches/memory/HeapWritableMemoryImpl.java
similarity index 100%
rename from src/main/java/org/apache/datasketches/memory/HeapWritableMemoryImpl.java
rename to datasketches-memory-base/src/main/java/org/apache/datasketches/memory/HeapWritableMemoryImpl.java
diff --git a/src/main/java/org/apache/datasketches/memory/Ints.java b/datasketches-memory-base/src/main/java/org/apache/datasketches/memory/Ints.java
similarity index 100%
rename from src/main/java/org/apache/datasketches/memory/Ints.java
rename to datasketches-memory-base/src/main/java/org/apache/datasketches/memory/Ints.java
diff --git a/src/main/java/org/apache/datasketches/memory/JDK7Compatible.java b/datasketches-memory-base/src/main/java/org/apache/datasketches/memory/JDK7Compatible.java
similarity index 100%
rename from src/main/java/org/apache/datasketches/memory/JDK7Compatible.java
rename to datasketches-memory-base/src/main/java/org/apache/datasketches/memory/JDK7Compatible.java
diff --git a/src/main/java/org/apache/datasketches/memory/Map.java b/datasketches-memory-base/src/main/java/org/apache/datasketches/memory/Map.java
similarity index 100%
rename from src/main/java/org/apache/datasketches/memory/Map.java
rename to datasketches-memory-base/src/main/java/org/apache/datasketches/memory/Map.java
diff --git a/src/main/java/org/apache/datasketches/memory/MapHandle.java b/datasketches-memory-base/src/main/java/org/apache/datasketches/memory/MapHandle.java
similarity index 100%
rename from src/main/java/org/apache/datasketches/memory/MapHandle.java
rename to datasketches-memory-base/src/main/java/org/apache/datasketches/memory/MapHandle.java
diff --git a/src/main/java/org/apache/datasketches/memory/MapNonNativeWritableBufferImpl.java b/datasketches-memory-base/src/main/java/org/apache/datasketches/memory/MapNonNativeWritableBufferImpl.java
similarity index 100%
rename from src/main/java/org/apache/datasketches/memory/MapNonNativeWritableBufferImpl.java
rename to datasketches-memory-base/src/main/java/org/apache/datasketches/memory/MapNonNativeWritableBufferImpl.java
diff --git a/src/main/java/org/apache/datasketches/memory/MapNonNativeWritableMemoryImpl.java b/datasketches-memory-base/src/main/java/org/apache/datasketches/memory/MapNonNativeWritableMemoryImpl.java
similarity index 100%
rename from src/main/java/org/apache/datasketches/memory/MapNonNativeWritableMemoryImpl.java
rename to datasketches-memory-base/src/main/java/org/apache/datasketches/memory/MapNonNativeWritableMemoryImpl.java
diff --git a/src/main/java/org/apache/datasketches/memory/MapWritableBufferImpl.java b/datasketches-memory-base/src/main/java/org/apache/datasketches/memory/MapWritableBufferImpl.java
similarity index 100%
rename from src/main/java/org/apache/datasketches/memory/MapWritableBufferImpl.java
rename to datasketches-memory-base/src/main/java/org/apache/datasketches/memory/MapWritableBufferImpl.java
diff --git a/src/main/java/org/apache/datasketches/memory/MapWritableMemoryImpl.java b/datasketches-memory-base/src/main/java/org/apache/datasketches/memory/MapWritableMemoryImpl.java
similarity index 100%
rename from src/main/java/org/apache/datasketches/memory/MapWritableMemoryImpl.java
rename to datasketches-memory-base/src/main/java/org/apache/datasketches/memory/MapWritableMemoryImpl.java
diff --git a/src/main/java/org/apache/datasketches/memory/Memory.java b/datasketches-memory-base/src/main/java/org/apache/datasketches/memory/Memory.java
similarity index 100%
rename from src/main/java/org/apache/datasketches/memory/Memory.java
rename to datasketches-memory-base/src/main/java/org/apache/datasketches/memory/Memory.java
diff --git a/src/main/java/org/apache/datasketches/memory/MemoryRequestServer.java b/datasketches-memory-base/src/main/java/org/apache/datasketches/memory/MemoryRequestServer.java
similarity index 100%
rename from src/main/java/org/apache/datasketches/memory/MemoryRequestServer.java
rename to datasketches-memory-base/src/main/java/org/apache/datasketches/memory/MemoryRequestServer.java
diff --git a/src/main/java/org/apache/datasketches/memory/NioBits.java b/datasketches-memory-base/src/main/java/org/apache/datasketches/memory/NioBits.java
similarity index 90%
copy from src/main/java/org/apache/datasketches/memory/NioBits.java
copy to datasketches-memory-base/src/main/java/org/apache/datasketches/memory/NioBits.java
index a2627b4..d0b4158 100644
--- a/src/main/java/org/apache/datasketches/memory/NioBits.java
+++ b/datasketches-memory-base/src/main/java/org/apache/datasketches/memory/NioBits.java
@@ -52,25 +52,25 @@ final class NioBits {
     try {
       VM_CLASS = Class.forName("sun.misc.VM");
       VM_MAX_DIRECT_MEMORY_METHOD =
-          VM_CLASS.getDeclaredMethod("maxDirectMemory");
+              VM_CLASS.getDeclaredMethod("maxDirectMemory");
       VM_MAX_DIRECT_MEMORY_METHOD.setAccessible(true);
       maxDBBMemory = (long)VM_MAX_DIRECT_MEMORY_METHOD
-          .invoke(null); //static method
+              .invoke(null); //static method
 
       VM_IS_DIRECT_MEMORY_PAGE_ALIGNED_METHOD =
-          VM_CLASS.getDeclaredMethod("isDirectMemoryPageAligned");
+              VM_CLASS.getDeclaredMethod("isDirectMemoryPageAligned");
       VM_IS_DIRECT_MEMORY_PAGE_ALIGNED_METHOD.setAccessible(true);
       isPageAligned = (boolean)VM_IS_DIRECT_MEMORY_PAGE_ALIGNED_METHOD
-          .invoke(null); //static method
+              .invoke(null); //static method
 
       NIO_BITS_CLASS = Class.forName("java.nio.Bits");
 
       NIO_BITS_RESERVE_MEMORY_METHOD = NIO_BITS_CLASS
-          .getDeclaredMethod("reserveMemory", long.class, int.class);
+              .getDeclaredMethod("reserveMemory", long.class, int.class);
       NIO_BITS_RESERVE_MEMORY_METHOD.setAccessible(true);
 
       NIO_BITS_UNRESERVE_MEMORY_METHOD = NIO_BITS_CLASS
-          .getDeclaredMethod("unreserveMemory", long.class, int.class);
+              .getDeclaredMethod("unreserveMemory", long.class, int.class);
       NIO_BITS_UNRESERVE_MEMORY_METHOD.setAccessible(true);
 
       final Field countField = NIO_BITS_CLASS.getDeclaredField("count");
@@ -144,7 +144,7 @@ final class NioBits {
       reserveUnreserve(allocationSize, capacity, NIO_BITS_RESERVE_MEMORY_METHOD);
     } catch (final Exception e) {
       throw new RuntimeException("Could not invoke java.nio.Bits.reserveMemory(...): "
-          + "allocationSize = " + allocationSize + ", capacity = " + capacity, e);
+              + "allocationSize = " + allocationSize + ", capacity = " + capacity, e);
     }
   }
 
@@ -153,12 +153,12 @@ final class NioBits {
       reserveUnreserve(allocationSize, capacity, NIO_BITS_UNRESERVE_MEMORY_METHOD);
     } catch (final Exception e) {
       throw new RuntimeException("Could not invoke java.nio.Bits.unreserveMemory(...): "
-          + "allocationSize = " + allocationSize + ", capacity = " + capacity, e);
+              + "allocationSize = " + allocationSize + ", capacity = " + capacity, e);
     }
   }
 
   private static void reserveUnreserve(long allocationSize, long capacity, final Method method)
-      throws Exception {
+          throws Exception {
     Util.zeroCheck(capacity, "capacity");
     // 1GB is a pretty "safe" limit.
     final long chunkSizeLimit = 1L << 30;
@@ -173,4 +173,4 @@ final class NioBits {
       allocationSize -= chunk;
     }
   }
-}
+}
\ No newline at end of file
diff --git a/src/main/java/org/apache/datasketches/memory/NonNativeWritableBufferImpl.java b/datasketches-memory-base/src/main/java/org/apache/datasketches/memory/NonNativeWritableBufferImpl.java
similarity index 100%
rename from src/main/java/org/apache/datasketches/memory/NonNativeWritableBufferImpl.java
rename to datasketches-memory-base/src/main/java/org/apache/datasketches/memory/NonNativeWritableBufferImpl.java
diff --git a/src/main/java/org/apache/datasketches/memory/NonNativeWritableMemoryImpl.java b/datasketches-memory-base/src/main/java/org/apache/datasketches/memory/NonNativeWritableMemoryImpl.java
similarity index 100%
rename from src/main/java/org/apache/datasketches/memory/NonNativeWritableMemoryImpl.java
rename to datasketches-memory-base/src/main/java/org/apache/datasketches/memory/NonNativeWritableMemoryImpl.java
diff --git a/src/main/java/org/apache/datasketches/memory/Prim.java b/datasketches-memory-base/src/main/java/org/apache/datasketches/memory/Prim.java
similarity index 100%
rename from src/main/java/org/apache/datasketches/memory/Prim.java
rename to datasketches-memory-base/src/main/java/org/apache/datasketches/memory/Prim.java
diff --git a/src/main/java/org/apache/datasketches/memory/ReadOnlyException.java b/datasketches-memory-base/src/main/java/org/apache/datasketches/memory/ReadOnlyException.java
similarity index 100%
copy from src/main/java/org/apache/datasketches/memory/ReadOnlyException.java
copy to datasketches-memory-base/src/main/java/org/apache/datasketches/memory/ReadOnlyException.java
diff --git a/src/main/java/org/apache/datasketches/memory/StepBoolean.java b/datasketches-memory-base/src/main/java/org/apache/datasketches/memory/StepBoolean.java
similarity index 100%
rename from src/main/java/org/apache/datasketches/memory/StepBoolean.java
rename to datasketches-memory-base/src/main/java/org/apache/datasketches/memory/StepBoolean.java
diff --git a/src/main/java/org/apache/datasketches/memory/UnsafeUtil.java b/datasketches-memory-base/src/main/java/org/apache/datasketches/memory/UnsafeUtil.java
similarity index 100%
rename from src/main/java/org/apache/datasketches/memory/UnsafeUtil.java
rename to datasketches-memory-base/src/main/java/org/apache/datasketches/memory/UnsafeUtil.java
diff --git a/src/main/java/org/apache/datasketches/memory/Utf8.java b/datasketches-memory-base/src/main/java/org/apache/datasketches/memory/Utf8.java
similarity index 100%
rename from src/main/java/org/apache/datasketches/memory/Utf8.java
rename to datasketches-memory-base/src/main/java/org/apache/datasketches/memory/Utf8.java
diff --git a/src/main/java/org/apache/datasketches/memory/Utf8CodingException.java b/datasketches-memory-base/src/main/java/org/apache/datasketches/memory/Utf8CodingException.java
similarity index 100%
rename from src/main/java/org/apache/datasketches/memory/Utf8CodingException.java
rename to datasketches-memory-base/src/main/java/org/apache/datasketches/memory/Utf8CodingException.java
diff --git a/src/main/java/org/apache/datasketches/memory/Util.java b/datasketches-memory-base/src/main/java/org/apache/datasketches/memory/Util.java
similarity index 100%
rename from src/main/java/org/apache/datasketches/memory/Util.java
rename to datasketches-memory-base/src/main/java/org/apache/datasketches/memory/Util.java
diff --git a/src/main/java/org/apache/datasketches/memory/WritableBuffer.java b/datasketches-memory-base/src/main/java/org/apache/datasketches/memory/WritableBuffer.java
similarity index 100%
rename from src/main/java/org/apache/datasketches/memory/WritableBuffer.java
rename to datasketches-memory-base/src/main/java/org/apache/datasketches/memory/WritableBuffer.java
diff --git a/src/main/java/org/apache/datasketches/memory/WritableBufferImpl.java b/datasketches-memory-base/src/main/java/org/apache/datasketches/memory/WritableBufferImpl.java
similarity index 100%
rename from src/main/java/org/apache/datasketches/memory/WritableBufferImpl.java
rename to datasketches-memory-base/src/main/java/org/apache/datasketches/memory/WritableBufferImpl.java
diff --git a/src/main/java/org/apache/datasketches/memory/WritableDirectHandle.java b/datasketches-memory-base/src/main/java/org/apache/datasketches/memory/WritableDirectHandle.java
similarity index 100%
rename from src/main/java/org/apache/datasketches/memory/WritableDirectHandle.java
rename to datasketches-memory-base/src/main/java/org/apache/datasketches/memory/WritableDirectHandle.java
diff --git a/src/main/java/org/apache/datasketches/memory/WritableHandle.java b/datasketches-memory-base/src/main/java/org/apache/datasketches/memory/WritableHandle.java
similarity index 100%
rename from src/main/java/org/apache/datasketches/memory/WritableHandle.java
rename to datasketches-memory-base/src/main/java/org/apache/datasketches/memory/WritableHandle.java
diff --git a/src/main/java/org/apache/datasketches/memory/WritableMap.java b/datasketches-memory-base/src/main/java/org/apache/datasketches/memory/WritableMap.java
similarity index 100%
rename from src/main/java/org/apache/datasketches/memory/WritableMap.java
rename to datasketches-memory-base/src/main/java/org/apache/datasketches/memory/WritableMap.java
diff --git a/src/main/java/org/apache/datasketches/memory/WritableMapHandle.java b/datasketches-memory-base/src/main/java/org/apache/datasketches/memory/WritableMapHandle.java
similarity index 100%
rename from src/main/java/org/apache/datasketches/memory/WritableMapHandle.java
rename to datasketches-memory-base/src/main/java/org/apache/datasketches/memory/WritableMapHandle.java
diff --git a/src/main/java/org/apache/datasketches/memory/WritableMemory.java b/datasketches-memory-base/src/main/java/org/apache/datasketches/memory/WritableMemory.java
similarity index 100%
rename from src/main/java/org/apache/datasketches/memory/WritableMemory.java
rename to datasketches-memory-base/src/main/java/org/apache/datasketches/memory/WritableMemory.java
diff --git a/src/main/java/org/apache/datasketches/memory/WritableMemoryImpl.java b/datasketches-memory-base/src/main/java/org/apache/datasketches/memory/WritableMemoryImpl.java
similarity index 100%
rename from src/main/java/org/apache/datasketches/memory/WritableMemoryImpl.java
rename to datasketches-memory-base/src/main/java/org/apache/datasketches/memory/WritableMemoryImpl.java
diff --git a/src/main/java/org/apache/datasketches/memory/XxHash64.java b/datasketches-memory-base/src/main/java/org/apache/datasketches/memory/XxHash64.java
similarity index 100%
rename from src/main/java/org/apache/datasketches/memory/XxHash64.java
rename to datasketches-memory-base/src/main/java/org/apache/datasketches/memory/XxHash64.java
diff --git a/src/main/java/org/apache/datasketches/memory/package-info.java b/datasketches-memory-base/src/main/java/org/apache/datasketches/memory/package-info.java
similarity index 100%
rename from src/main/java/org/apache/datasketches/memory/package-info.java
rename to datasketches-memory-base/src/main/java/org/apache/datasketches/memory/package-info.java
diff --git a/src/main/javadoc/overview.html b/datasketches-memory-base/src/main/javadoc/overview.html
similarity index 100%
copy from src/main/javadoc/overview.html
copy to datasketches-memory-base/src/main/javadoc/overview.html
diff --git a/src/test/java/org/apache/datasketches/memory/AllocateDirectMapMemoryTest.java b/datasketches-memory-base/src/test/java/org/apache/datasketches/memory/AllocateDirectMapMemoryTest.java
similarity index 100%
rename from src/test/java/org/apache/datasketches/memory/AllocateDirectMapMemoryTest.java
rename to datasketches-memory-base/src/test/java/org/apache/datasketches/memory/AllocateDirectMapMemoryTest.java
diff --git a/src/test/java/org/apache/datasketches/memory/AllocateDirectMemoryTest.java b/datasketches-memory-base/src/test/java/org/apache/datasketches/memory/AllocateDirectMemoryTest.java
similarity index 100%
rename from src/test/java/org/apache/datasketches/memory/AllocateDirectMemoryTest.java
rename to datasketches-memory-base/src/test/java/org/apache/datasketches/memory/AllocateDirectMemoryTest.java
diff --git a/src/test/java/org/apache/datasketches/memory/AllocateDirectWritableMapMemoryTest.java b/datasketches-memory-base/src/test/java/org/apache/datasketches/memory/AllocateDirectWritableMapMemoryTest.java
similarity index 100%
rename from src/test/java/org/apache/datasketches/memory/AllocateDirectWritableMapMemoryTest.java
rename to datasketches-memory-base/src/test/java/org/apache/datasketches/memory/AllocateDirectWritableMapMemoryTest.java
diff --git a/src/test/java/org/apache/datasketches/memory/BaseBufferTest.java b/datasketches-memory-base/src/test/java/org/apache/datasketches/memory/BaseBufferTest.java
similarity index 100%
rename from src/test/java/org/apache/datasketches/memory/BaseBufferTest.java
rename to datasketches-memory-base/src/test/java/org/apache/datasketches/memory/BaseBufferTest.java
diff --git a/src/test/java/org/apache/datasketches/memory/BaseStateTest.java b/datasketches-memory-base/src/test/java/org/apache/datasketches/memory/BaseStateTest.java
similarity index 100%
rename from src/test/java/org/apache/datasketches/memory/BaseStateTest.java
rename to datasketches-memory-base/src/test/java/org/apache/datasketches/memory/BaseStateTest.java
diff --git a/src/test/java/org/apache/datasketches/memory/Buffer2Test.java b/datasketches-memory-base/src/test/java/org/apache/datasketches/memory/Buffer2Test.java
similarity index 100%
rename from src/test/java/org/apache/datasketches/memory/Buffer2Test.java
rename to datasketches-memory-base/src/test/java/org/apache/datasketches/memory/Buffer2Test.java
diff --git a/src/test/java/org/apache/datasketches/memory/BufferBoundaryCheckTest.java b/datasketches-memory-base/src/test/java/org/apache/datasketches/memory/BufferBoundaryCheckTest.java
similarity index 100%
rename from src/test/java/org/apache/datasketches/memory/BufferBoundaryCheckTest.java
rename to datasketches-memory-base/src/test/java/org/apache/datasketches/memory/BufferBoundaryCheckTest.java
diff --git a/src/test/java/org/apache/datasketches/memory/BufferInvariantsTest.java b/datasketches-memory-base/src/test/java/org/apache/datasketches/memory/BufferInvariantsTest.java
similarity index 100%
rename from src/test/java/org/apache/datasketches/memory/BufferInvariantsTest.java
rename to datasketches-memory-base/src/test/java/org/apache/datasketches/memory/BufferInvariantsTest.java
diff --git a/src/test/java/org/apache/datasketches/memory/BufferReadWriteSafetyTest.java b/datasketches-memory-base/src/test/java/org/apache/datasketches/memory/BufferReadWriteSafetyTest.java
similarity index 100%
rename from src/test/java/org/apache/datasketches/memory/BufferReadWriteSafetyTest.java
rename to datasketches-memory-base/src/test/java/org/apache/datasketches/memory/BufferReadWriteSafetyTest.java
diff --git a/src/test/java/org/apache/datasketches/memory/BufferTest.java b/datasketches-memory-base/src/test/java/org/apache/datasketches/memory/BufferTest.java
similarity index 100%
rename from src/test/java/org/apache/datasketches/memory/BufferTest.java
rename to datasketches-memory-base/src/test/java/org/apache/datasketches/memory/BufferTest.java
diff --git a/src/test/java/org/apache/datasketches/memory/CommonBufferTest.java b/datasketches-memory-base/src/test/java/org/apache/datasketches/memory/CommonBufferTest.java
similarity index 100%
rename from src/test/java/org/apache/datasketches/memory/CommonBufferTest.java
rename to datasketches-memory-base/src/test/java/org/apache/datasketches/memory/CommonBufferTest.java
diff --git a/src/test/java/org/apache/datasketches/memory/CommonMemoryTest.java b/datasketches-memory-base/src/test/java/org/apache/datasketches/memory/CommonMemoryTest.java
similarity index 100%
rename from src/test/java/org/apache/datasketches/memory/CommonMemoryTest.java
rename to datasketches-memory-base/src/test/java/org/apache/datasketches/memory/CommonMemoryTest.java
diff --git a/src/test/java/org/apache/datasketches/memory/CopyMemoryOverlapTest.java b/datasketches-memory-base/src/test/java/org/apache/datasketches/memory/CopyMemoryOverlapTest.java
similarity index 100%
rename from src/test/java/org/apache/datasketches/memory/CopyMemoryOverlapTest.java
rename to datasketches-memory-base/src/test/java/org/apache/datasketches/memory/CopyMemoryOverlapTest.java
diff --git a/src/test/java/org/apache/datasketches/memory/CopyMemoryTest.java b/datasketches-memory-base/src/test/java/org/apache/datasketches/memory/CopyMemoryTest.java
similarity index 100%
rename from src/test/java/org/apache/datasketches/memory/CopyMemoryTest.java
rename to datasketches-memory-base/src/test/java/org/apache/datasketches/memory/CopyMemoryTest.java
diff --git a/src/test/java/org/apache/datasketches/memory/ExampleMemoryRequestServerTest.java b/datasketches-memory-base/src/test/java/org/apache/datasketches/memory/ExampleMemoryRequestServerTest.java
similarity index 100%
rename from src/test/java/org/apache/datasketches/memory/ExampleMemoryRequestServerTest.java
rename to datasketches-memory-base/src/test/java/org/apache/datasketches/memory/ExampleMemoryRequestServerTest.java
diff --git a/src/test/java/org/apache/datasketches/memory/IgnoredArrayOverflowTest.java b/datasketches-memory-base/src/test/java/org/apache/datasketches/memory/IgnoredArrayOverflowTest.java
similarity index 100%
rename from src/test/java/org/apache/datasketches/memory/IgnoredArrayOverflowTest.java
rename to datasketches-memory-base/src/test/java/org/apache/datasketches/memory/IgnoredArrayOverflowTest.java
diff --git a/src/test/java/org/apache/datasketches/memory/IsValidUtf8TestUtil.java b/datasketches-memory-base/src/test/java/org/apache/datasketches/memory/IsValidUtf8TestUtil.java
similarity index 100%
rename from src/test/java/org/apache/datasketches/memory/IsValidUtf8TestUtil.java
rename to datasketches-memory-base/src/test/java/org/apache/datasketches/memory/IsValidUtf8TestUtil.java
diff --git a/src/test/java/org/apache/datasketches/memory/LeafImplTest.java b/datasketches-memory-base/src/test/java/org/apache/datasketches/memory/LeafImplTest.java
similarity index 100%
rename from src/test/java/org/apache/datasketches/memory/LeafImplTest.java
rename to datasketches-memory-base/src/test/java/org/apache/datasketches/memory/LeafImplTest.java
diff --git a/src/test/java/org/apache/datasketches/memory/MemoryBoundaryCheckTest.java b/datasketches-memory-base/src/test/java/org/apache/datasketches/memory/MemoryBoundaryCheckTest.java
similarity index 100%
rename from src/test/java/org/apache/datasketches/memory/MemoryBoundaryCheckTest.java
rename to datasketches-memory-base/src/test/java/org/apache/datasketches/memory/MemoryBoundaryCheckTest.java
diff --git a/src/test/java/org/apache/datasketches/memory/MemoryReadWriteSafetyTest.java b/datasketches-memory-base/src/test/java/org/apache/datasketches/memory/MemoryReadWriteSafetyTest.java
similarity index 100%
rename from src/test/java/org/apache/datasketches/memory/MemoryReadWriteSafetyTest.java
rename to datasketches-memory-base/src/test/java/org/apache/datasketches/memory/MemoryReadWriteSafetyTest.java
diff --git a/src/test/java/org/apache/datasketches/memory/MemoryTest.java b/datasketches-memory-base/src/test/java/org/apache/datasketches/memory/MemoryTest.java
similarity index 100%
rename from src/test/java/org/apache/datasketches/memory/MemoryTest.java
rename to datasketches-memory-base/src/test/java/org/apache/datasketches/memory/MemoryTest.java
diff --git a/src/test/java/org/apache/datasketches/memory/MemoryWriteToTest.java b/datasketches-memory-base/src/test/java/org/apache/datasketches/memory/MemoryWriteToTest.java
similarity index 100%
rename from src/test/java/org/apache/datasketches/memory/MemoryWriteToTest.java
rename to datasketches-memory-base/src/test/java/org/apache/datasketches/memory/MemoryWriteToTest.java
diff --git a/src/test/java/org/apache/datasketches/memory/NioBitsTest.java b/datasketches-memory-base/src/test/java/org/apache/datasketches/memory/NioBitsTest.java
similarity index 100%
rename from src/test/java/org/apache/datasketches/memory/NioBitsTest.java
rename to datasketches-memory-base/src/test/java/org/apache/datasketches/memory/NioBitsTest.java
diff --git a/src/test/java/org/apache/datasketches/memory/NonNativeWritableBufferImplTest.java b/datasketches-memory-base/src/test/java/org/apache/datasketches/memory/NonNativeWritableBufferImplTest.java
similarity index 100%
rename from src/test/java/org/apache/datasketches/memory/NonNativeWritableBufferImplTest.java
rename to datasketches-memory-base/src/test/java/org/apache/datasketches/memory/NonNativeWritableBufferImplTest.java
diff --git a/src/test/java/org/apache/datasketches/memory/NonNativeWritableMemoryImplTest.java b/datasketches-memory-base/src/test/java/org/apache/datasketches/memory/NonNativeWritableMemoryImplTest.java
similarity index 100%
rename from src/test/java/org/apache/datasketches/memory/NonNativeWritableMemoryImplTest.java
rename to datasketches-memory-base/src/test/java/org/apache/datasketches/memory/NonNativeWritableMemoryImplTest.java
diff --git a/src/test/java/org/apache/datasketches/memory/SpecificLeafTest.java b/datasketches-memory-base/src/test/java/org/apache/datasketches/memory/SpecificLeafTest.java
similarity index 100%
rename from src/test/java/org/apache/datasketches/memory/SpecificLeafTest.java
rename to datasketches-memory-base/src/test/java/org/apache/datasketches/memory/SpecificLeafTest.java
diff --git a/src/test/java/org/apache/datasketches/memory/UnsafeUtilTest.java b/datasketches-memory-base/src/test/java/org/apache/datasketches/memory/UnsafeUtilTest.java
similarity index 100%
rename from src/test/java/org/apache/datasketches/memory/UnsafeUtilTest.java
rename to datasketches-memory-base/src/test/java/org/apache/datasketches/memory/UnsafeUtilTest.java
diff --git a/src/test/java/org/apache/datasketches/memory/Utf8Test.java b/datasketches-memory-base/src/test/java/org/apache/datasketches/memory/Utf8Test.java
similarity index 100%
rename from src/test/java/org/apache/datasketches/memory/Utf8Test.java
rename to datasketches-memory-base/src/test/java/org/apache/datasketches/memory/Utf8Test.java
diff --git a/src/test/java/org/apache/datasketches/memory/UtilTest.java b/datasketches-memory-base/src/test/java/org/apache/datasketches/memory/UtilTest.java
similarity index 100%
rename from src/test/java/org/apache/datasketches/memory/UtilTest.java
rename to datasketches-memory-base/src/test/java/org/apache/datasketches/memory/UtilTest.java
diff --git a/src/test/java/org/apache/datasketches/memory/WritableBufferImplTest.java b/datasketches-memory-base/src/test/java/org/apache/datasketches/memory/WritableBufferImplTest.java
similarity index 100%
rename from src/test/java/org/apache/datasketches/memory/WritableBufferImplTest.java
rename to datasketches-memory-base/src/test/java/org/apache/datasketches/memory/WritableBufferImplTest.java
diff --git a/src/test/java/org/apache/datasketches/memory/WritableDirectCopyTest.java b/datasketches-memory-base/src/test/java/org/apache/datasketches/memory/WritableDirectCopyTest.java
similarity index 100%
rename from src/test/java/org/apache/datasketches/memory/WritableDirectCopyTest.java
rename to datasketches-memory-base/src/test/java/org/apache/datasketches/memory/WritableDirectCopyTest.java
diff --git a/src/test/java/org/apache/datasketches/memory/WritableMemoryImplTest.java b/datasketches-memory-base/src/test/java/org/apache/datasketches/memory/WritableMemoryImplTest.java
similarity index 100%
rename from src/test/java/org/apache/datasketches/memory/WritableMemoryImplTest.java
rename to datasketches-memory-base/src/test/java/org/apache/datasketches/memory/WritableMemoryImplTest.java
diff --git a/src/test/java/org/apache/datasketches/memory/WritableMemoryTest.java b/datasketches-memory-base/src/test/java/org/apache/datasketches/memory/WritableMemoryTest.java
similarity index 100%
rename from src/test/java/org/apache/datasketches/memory/WritableMemoryTest.java
rename to datasketches-memory-base/src/test/java/org/apache/datasketches/memory/WritableMemoryTest.java
diff --git a/src/test/java/org/apache/datasketches/memory/XxHash64LoopingTest.java b/datasketches-memory-base/src/test/java/org/apache/datasketches/memory/XxHash64LoopingTest.java
similarity index 100%
rename from src/test/java/org/apache/datasketches/memory/XxHash64LoopingTest.java
rename to datasketches-memory-base/src/test/java/org/apache/datasketches/memory/XxHash64LoopingTest.java
diff --git a/src/test/java/org/apache/datasketches/memory/XxHash64Test.java b/datasketches-memory-base/src/test/java/org/apache/datasketches/memory/XxHash64Test.java
similarity index 100%
rename from src/test/java/org/apache/datasketches/memory/XxHash64Test.java
rename to datasketches-memory-base/src/test/java/org/apache/datasketches/memory/XxHash64Test.java
diff --git a/src/test/java/org/apache/datasketches/memory/ZeroCapacityTest.java b/datasketches-memory-base/src/test/java/org/apache/datasketches/memory/ZeroCapacityTest.java
similarity index 100%
rename from src/test/java/org/apache/datasketches/memory/ZeroCapacityTest.java
rename to datasketches-memory-base/src/test/java/org/apache/datasketches/memory/ZeroCapacityTest.java
diff --git a/src/test/resources/GettysburgAddress.txt b/datasketches-memory-base/src/test/resources/GettysburgAddress.txt
similarity index 100%
rename from src/test/resources/GettysburgAddress.txt
rename to datasketches-memory-base/src/test/resources/GettysburgAddress.txt
diff --git a/datasketches-memory-java11/pom.xml b/datasketches-memory-java11/pom.xml
new file mode 100644
index 0000000..a3fcd86
--- /dev/null
+++ b/datasketches-memory-java11/pom.xml
@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one
+  ~ or more contributor license agreements.  See the NOTICE file
+  ~ distributed with this work for additional information
+  ~ regarding copyright ownership.  The ASF licenses this file
+  ~ to you 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
+  ~
+  ~   http://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.
+  -->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
+                             http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.apache.datasketches</groupId>
+        <artifactId>datasketches-memory-root</artifactId>
+        <version>1.4.0-SNAPSHOT</version>
+    </parent>
+
+    <artifactId>datasketches-memory-java11</artifactId>
+    <name>${project.artifactId}</name>
+
+    <properties>
+        <maven.install.skip>true</maven.install.skip>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.datasketches</groupId>
+            <artifactId>datasketches-memory-base</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+       <dependency>
+         <groupId>junit</groupId>
+         <artifactId>junit</artifactId>
+         <version>4.12</version>
+         <scope>test</scope>
+       </dependency>
+    </dependencies>
+
+    <build>
+        <pluginManagement>
+            <plugins>
+                <plugin>
+                    <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-compiler-plugin</artifactId>
+                    <version>3.8.1</version>
+                    <configuration>
+                        <source>11</source>
+                        <target>11</target>
+                        <compilerArgs>
+                            <arg>--add-exports</arg>
+                            <arg>java.base/sun.nio.ch=ALL-UNNAMED</arg>
+                            <arg>--add-exports</arg>
+                            <arg>java.base/jdk.internal.ref=ALL-UNNAMED</arg>
+                        </compilerArgs>
+                        <jdkToolchain>
+                            <version>11</version>
+                        </jdkToolchain>
+                    </configuration>
+                </plugin>
+                <plugin>
+                    <!-- Apache Parent pom, pluginManagement-->
+                    <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-surefire-plugin</artifactId>
+                    <version>${maven-surefire-plugin.version}</version>
+                    <configuration>
+                        <trimStackTrace>false</trimStackTrace>
+                        <useManifestOnlyJar>false</useManifestOnlyJar>
+                        <redirectTestOutputToFile>true</redirectTestOutputToFile>
+                        <argLine>
+                            --add-opens java.base/java.nio=ALL-UNNAMED
+                            --add-opens java.base/java.lang=ALL-UNNAMED
+                            --add-opens java.base/jdk.internal.misc=ALL-UNNAMED
+                            --add-opens java.base/jdk.internal.ref=ALL-UNNAMED
+                            --add-opens java.base/sun.nio.ch=ALL-UNNAMED
+                        </argLine>
+                        <jdkToolchain>
+                            <version>11</version>
+                        </jdkToolchain>
+                    </configuration>
+                </plugin>
+            </plugins>
+        </pluginManagement>
+    </build>
+</project>
diff --git a/src/main/java/org/apache/datasketches/memory/AllocateDirect.java b/datasketches-memory-java11/src/main/java/org/apache/datasketches/memory/AllocateDirect.java
similarity index 97%
rename from src/main/java/org/apache/datasketches/memory/AllocateDirect.java
rename to datasketches-memory-java11/src/main/java/org/apache/datasketches/memory/AllocateDirect.java
index 805554c..7fcd287 100644
--- a/src/main/java/org/apache/datasketches/memory/AllocateDirect.java
+++ b/datasketches-memory-java11/src/main/java/org/apache/datasketches/memory/AllocateDirect.java
@@ -21,11 +21,10 @@ package org.apache.datasketches.memory;
 
 import static org.apache.datasketches.memory.UnsafeUtil.unsafe;
 
+import jdk.internal.ref.Cleaner;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import sun.misc.Cleaner;
-
 /**
  * Provides access to direct (native) memory.
  *
@@ -37,7 +36,7 @@ final class AllocateDirect implements AutoCloseable {
   private static final Logger LOG = LoggerFactory.getLogger(AllocateDirect.class);
 
   private final Deallocator deallocator;
-  private final Cleaner cleaner; //TODO-JDK9 import jdk.internal.ref.Cleaner;
+  private final Cleaner cleaner;
   private final long nativeBaseOffset;
 
   /**
diff --git a/src/main/java/org/apache/datasketches/memory/AllocateDirectMap.java b/datasketches-memory-java11/src/main/java/org/apache/datasketches/memory/AllocateDirectMap.java
similarity index 99%
rename from src/main/java/org/apache/datasketches/memory/AllocateDirectMap.java
rename to datasketches-memory-java11/src/main/java/org/apache/datasketches/memory/AllocateDirectMap.java
index 0dbe16a..aba9ebd 100644
--- a/src/main/java/org/apache/datasketches/memory/AllocateDirectMap.java
+++ b/datasketches-memory-java11/src/main/java/org/apache/datasketches/memory/AllocateDirectMap.java
@@ -30,10 +30,10 @@ import java.lang.reflect.Method;
 import java.nio.MappedByteBuffer;
 import java.nio.channels.FileChannel;
 
+import jdk.internal.ref.Cleaner;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import sun.misc.Cleaner; //TODO-JDK9 jdk.internal.ref.Cleaner;
 import sun.nio.ch.FileChannelImpl;
 
 /**
diff --git a/src/main/java/org/apache/datasketches/memory/NioBits.java b/datasketches-memory-java11/src/main/java/org/apache/datasketches/memory/NioBits.java
similarity index 98%
rename from src/main/java/org/apache/datasketches/memory/NioBits.java
rename to datasketches-memory-java11/src/main/java/org/apache/datasketches/memory/NioBits.java
index a2627b4..973fb54 100644
--- a/src/main/java/org/apache/datasketches/memory/NioBits.java
+++ b/datasketches-memory-java11/src/main/java/org/apache/datasketches/memory/NioBits.java
@@ -50,7 +50,7 @@ final class NioBits {
 
   static {
     try {
-      VM_CLASS = Class.forName("sun.misc.VM");
+      VM_CLASS = Class.forName("jdk.internal.misc.VM");
       VM_MAX_DIRECT_MEMORY_METHOD =
           VM_CLASS.getDeclaredMethod("maxDirectMemory");
       VM_MAX_DIRECT_MEMORY_METHOD.setAccessible(true);
@@ -73,15 +73,15 @@ final class NioBits {
           .getDeclaredMethod("unreserveMemory", long.class, int.class);
       NIO_BITS_UNRESERVE_MEMORY_METHOD.setAccessible(true);
 
-      final Field countField = NIO_BITS_CLASS.getDeclaredField("count");
+      final Field countField = NIO_BITS_CLASS.getDeclaredField("COUNT");
       countField.setAccessible(true);
       nioBitsCount = (AtomicLong) (countField.get(null));
 
-      final Field reservedMemoryField = NIO_BITS_CLASS.getDeclaredField("reservedMemory");
+      final Field reservedMemoryField = NIO_BITS_CLASS.getDeclaredField("RESERVED_MEMORY");
       reservedMemoryField.setAccessible(true);
       nioBitsReservedMemory = (AtomicLong) (reservedMemoryField.get(null));
 
-      final Field totalCapacityField = NIO_BITS_CLASS.getDeclaredField("totalCapacity");
+      final Field totalCapacityField = NIO_BITS_CLASS.getDeclaredField("TOTAL_CAPACITY");
       totalCapacityField.setAccessible(true);
       nioBitsTotalCapacity = (AtomicLong) (totalCapacityField.get(null));
 
diff --git a/src/main/javadoc/overview.html b/datasketches-memory-java11/src/main/javadoc/overview.html
similarity index 100%
rename from src/main/javadoc/overview.html
rename to datasketches-memory-java11/src/main/javadoc/overview.html
diff --git a/src/main/java/org/apache/datasketches/memory/ReadOnlyException.java b/datasketches-memory-java11/src/test/java/org/apache/datasketches/memory/AllocateDirectTest.java
similarity index 61%
rename from src/main/java/org/apache/datasketches/memory/ReadOnlyException.java
rename to datasketches-memory-java11/src/test/java/org/apache/datasketches/memory/AllocateDirectTest.java
index ebced06..e89396a 100644
--- a/src/main/java/org/apache/datasketches/memory/ReadOnlyException.java
+++ b/datasketches-memory-java11/src/test/java/org/apache/datasketches/memory/AllocateDirectTest.java
@@ -17,22 +17,28 @@
  * under the License.
  */
 
+/*
+ * Note: Lincoln's Gettysburg Address is in the public domain. See LICENSE.
+ */
+
 package org.apache.datasketches.memory;
 
-/**
- * The exception thrown when attempting to write into a read-only Resource.
- *
- * @author Praveenkumar Venkatesan
- */
-public class ReadOnlyException extends UnsupportedOperationException {
-    private static final long serialVersionUID = 1L;
+import org.testng.annotations.Test;
+
+import static org.testng.Assert.assertEquals;
 
-    /**
-     * Read Only Exception
-     * @param message the error message
-     */
-    public ReadOnlyException(final String message) {
-      super(message);
+@SuppressWarnings("javadoc")
+public class AllocateDirectTest {
+
+  @Test
+  public void simpleAllocateDirect() {
+    int longs = 32;
+    try (WritableDirectHandle wh = WritableMemory.allocateDirect(longs << 3)) {
+      WritableMemory wMem1 = wh.get();
+      for (int i = 0; i < longs; i++) {
+        wMem1.putLong(i << 3, i);
+        assertEquals(wMem1.getLong(i << 3), i);
+      }
     }
+  }
 }
-
diff --git a/datasketches-memory-multirelease/pom.xml b/datasketches-memory-multirelease/pom.xml
new file mode 100644
index 0000000..9845c73
--- /dev/null
+++ b/datasketches-memory-multirelease/pom.xml
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one
+  ~ or more contributor license agreements.  See the NOTICE file
+  ~ distributed with this work for additional information
+  ~ regarding copyright ownership.  The ASF licenses this file
+  ~ to you 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
+  ~
+  ~   http://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.
+  -->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
+                             http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.apache.datasketches</groupId>
+        <artifactId>datasketches-memory-root</artifactId>
+        <version>1.4.0-SNAPSHOT</version>
+    </parent>
+
+    <artifactId>datasketches-memory-multirelease</artifactId>
+    <name>${project.artifactId}</name>
+
+    <build>
+        <plugins>
+            <plugin>
+                <!-- Extends Apache Parent pom, apache-release profile -->
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-javadoc-plugin</artifactId>
+                <version>${maven-javadoc-plugin.version}</version>
+                <configuration>
+                    <docfilessubdirs>true</docfilessubdirs>
+                </configuration>
+                <executions>
+                    <execution>
+                        <id>attach-javadocs</id>
+                        <goals>
+                            <goal>jar</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <artifactId>maven-assembly-plugin</artifactId>
+                <version>3.1.0</version>
+                <configuration>
+                    <appendAssemblyId>false</appendAssemblyId>
+                    <descriptors>
+                        <descriptor>src/assembly/mrjar.xml</descriptor>
+                    </descriptors>
+                    <archive>
+                        <manifestEntries>
+                            <Multi-Release>true</Multi-Release>
+                        </manifestEntries>
+                    </archive>
+                </configuration>
+                <executions>
+                    <execution>
+                        <id>make-assembly</id>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>single</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+
+    <dependencies><!-- add multirelease-base dependencies if any -->
+    </dependencies>
+</project>
diff --git a/datasketches-memory-multirelease/src/assembly/mrjar.xml b/datasketches-memory-multirelease/src/assembly/mrjar.xml
new file mode 100644
index 0000000..1900300
--- /dev/null
+++ b/datasketches-memory-multirelease/src/assembly/mrjar.xml
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one
+  ~ or more contributor license agreements.  See the NOTICE file
+  ~ distributed with this work for additional information
+  ~ regarding copyright ownership.  The ASF licenses this file
+  ~ to you 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
+  ~
+  ~   http://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.
+  -->
+<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd">
+  <id>mvjar</id>
+  <formats>
+    <format>jar</format>
+  </formats>
+  <includeBaseDirectory>false</includeBaseDirectory>
+  <moduleSets>
+    <moduleSet>
+      <useAllReactorProjects>true</useAllReactorProjects>
+      <includes>
+        <include>org.apache.datasketches:datasketches-memory-base</include>
+      </includes>
+      <binaries>
+        <unpack>true</unpack>
+        <includeDependencies>false</includeDependencies>
+      </binaries>
+    </moduleSet>
+    <moduleSet>
+      <useAllReactorProjects>true</useAllReactorProjects>
+      <includes>
+        <include>org.apache.datasketches:datasketches-memory-java11</include>
+      </includes>
+      <binaries>
+        <outputDirectory>META-INF/versions/11</outputDirectory>
+        <unpack>true</unpack>
+        <includeDependencies>false</includeDependencies>
+        <unpackOptions>
+          <excludes>
+            <exclude>/META-INF/**</exclude>
+          </excludes>
+        </unpackOptions>
+      </binaries>
+    </moduleSet>
+  </moduleSets>
+</assembly>
diff --git a/pom.xml b/pom.xml
index 446e689..1d46750 100644
--- a/pom.xml
+++ b/pom.xml
@@ -20,671 +20,679 @@ under the License.
 -->
 
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-
-  <modelVersion>4.0.0</modelVersion>
-
-  <parent>
-    <groupId>org.apache</groupId>
-    <artifactId>apache</artifactId>
-    <version>23</version>
-  </parent>
-
-  <groupId>org.apache.datasketches</groupId>
-  <artifactId>datasketches-memory</artifactId>
-  <version>1.4.0-SNAPSHOT</version>
-  <packaging>jar</packaging>
-
-  <name>${project.artifactId}</name>
-  <description>High-performance native memory access.</description>
-  <url>https://datasketches.apache.org/</url>
-  <inceptionYear>2015</inceptionYear>
-
-  <mailingLists>
-    <mailingList>
-      <name>DataSketches Developers</name>
-      <subscribe>dev-subscribe@datasketches.apache.org</subscribe>
-      <unsubscribe>dev-unsubscribe@datasketches.apache.org</unsubscribe>
-      <post>dev@datasketches.apache.org</post>
-      <archive>https://mail-archives.apache.org/mod_mbox/datasketches-dev</archive>
-    </mailingList>
-    <mailingList>
-      <name>sketches-user</name>
-      <archive>https://groups.google.com/forum/#!forum/sketches-user</archive>
-      <subscribe>mailto:sketches-user%2Bsubscribe@googlegroups.com</subscribe>
-      <unsubscribe>mailto:sketches-user%2Bunsubscribe@googlegroups.com</unsubscribe>
-      <post>mailto:sketches-user@googlegroups.com</post>
-    </mailingList>
-  </mailingLists>
-
-  <scm>
-    <connection>scm:git:ssh://git@github.com/apache/${project.artifactId}.git</connection>
-    <developerConnection>scm:git:ssh://git@github.com/apache/${project.artifactId}.git</developerConnection>
-    <url>https://github.com/apache/${project.artifactId}</url>
-    <tag>HEAD</tag>
-  </scm>
-
-  <issueManagement>
-    <!-- <system>jira</system>
-      <url>https://issues.apache.org/jira/browse/DATASKETCHES</url> -->
-    <system>GitHub</system>
-    <url>https://github.com/apache/${project.artifactId}/issues</url>
-  </issueManagement>
-
-  <developers>
-    <developer>
-      <name>The Apache DataSketches Team</name>
-      <email>dev@datasketches.apache.org</email>
-      <url>https://datasketches.apache.org</url>
-      <organization>Apache Software Foundation</organization>
-      <organizationUrl>http://www.apache.org</organizationUrl>
-    </developer>
-  </developers>
-
-  <properties>
-    <!-- UNIQUE FOR THIS JAVA COMPONENT -->
-    <slf4j-api.version>1.7.30</slf4j-api.version>
-    <slf4j-simple.version>1.7.30</slf4j-simple.version>
-    <protobuf-java.version>3.6.0</protobuf-java.version>
-    <!-- Used for UTF8 testing -->
-    <zero-allocation-hashing.version>0.8</zero-allocation-hashing.version>
-    <!-- END:UNIQUE FOR THIS JAVA COMPONENT -->
-
-    <!-- Test -->
-    <testng.version>7.1.0</testng.version>
-
-    <!-- System-wide properties -->
-    <maven.version>3.5.0</maven.version>
-    <java.version>1.8</java.version>
-    <maven.compiler.source>${java.version}</maven.compiler.source>
-    <maven.compiler.target>${java.version}</maven.compiler.target>
-    <argLine>-Xmx4g -Duser.language=en -Duser.country=US -Dfile.encoding=UTF-8</argLine>
-    <charset.encoding>UTF-8</charset.encoding>
-    <project.build.sourceEncoding>${charset.encoding}</project.build.sourceEncoding>
-    <project.build.resourceEncoding>${charset.encoding}</project.build.resourceEncoding>
-    <project.reporting.outputEncoding>${charset.encoding}</project.reporting.outputEncoding>
-
-    <!-- org.codehaus plugins -->
-    <!-- used for strict profile testing-->
-    <plexus-compiler-javac-errorprone.version>2.8.5</plexus-compiler-javac-errorprone.version>
-    <versions-maven-plugin.version>2.8.1</versions-maven-plugin.version>
-
-    <!--  Maven Plugins -->
-    <maven-assembly-plugin.version>3.3.0</maven-assembly-plugin.version> <!-- overrides parent -->
-    <maven-compiler-plugin.version>3.8.1</maven-compiler-plugin.version> <!-- overrides parent -->
-    <maven-deploy-plugin.version>3.0.0-M1</maven-deploy-plugin.version> <!-- overrides parent -->
-    <maven-enforcer-plugin.version>3.0.0-M2</maven-enforcer-plugin.version> <!-- overrides parent -->
-    <maven-gpg-plugin.version>1.6</maven-gpg-plugin.version> <!-- overrides parent -->
-    <maven-jar-plugin.version>3.2.0</maven-jar-plugin.version> <!-- overrides parent -->
-    <maven-javadoc-plugin.version>3.2.0</maven-javadoc-plugin.version> <!-- overrides parent -->
-    <maven-release-plugin.version>3.0.0-M1</maven-release-plugin.version> <!-- overrides parent -->
-    <maven-remote-resources-plugin.version>[1.7.0,)</maven-remote-resources-plugin.version> <!-- overrides parent -->
-    <maven-source-plugin.version>3.2.1</maven-source-plugin.version> <!-- overrides parent -->
-    <maven-surefire-plugin.version>3.0.0-M5</maven-surefire-plugin.version> <!-- overrides parent -->
-    <!-- Apache Plugins -->
-    <apache-rat-plugin.version>0.13</apache-rat-plugin.version> <!-- overrides parent -->
-    <!-- org.jacoco Maven Plugins -->
-    <jacoco-maven-plugin.version>0.8.6</jacoco-maven-plugin.version>
-    <!-- org.eluder Maven Plugins -->
-    <coveralls-repo-token></coveralls-repo-token>
-    <coveralls-maven-plugin.version>4.3.0</coveralls-maven-plugin.version>
-    <!-- other -->
-    <lifecycle-mapping.version>1.0.0</lifecycle-mapping.version>
-    <git-commit-id-plugin.version>4.0.4</git-commit-id-plugin.version>
-  </properties>
-
-  <repositories>
-    <repository>
-      <id>apache.snapshots</id>
-      <name>Apache Snapshot Repository</name>
-      <url>https://repository.apache.org/content/groups/snapshots/org/apache/datasketches/</url>
-      <releases>
-        <enabled>false</enabled>
-      </releases>
-      <snapshots>
-        <enabled>true</enabled>
-      </snapshots>
-    </repository>
-    <repository>
-      <id>apache</id>
-      <name>Apache Releases Repository</name>
-      <url>https://repository.apache.org/content/repositories/releases/org/apache/datasketches/</url>
-      <releases>
-        <enabled>true</enabled>
-      </releases>
-      <snapshots>
-        <enabled>false</enabled>
-      </snapshots>
-    </repository>
-  </repositories>
-
-  <dependencies>
-    <!-- UNIQUE FOR THIS JAVA COMPONENT -->
-    <dependency>
-      <groupId>org.slf4j</groupId>
-      <artifactId>slf4j-api</artifactId>
-      <version>${slf4j-api.version}</version>
-    </dependency>
-    <!-- Test Scope -->
-    <dependency>
-      <groupId>org.slf4j</groupId>
-      <artifactId>slf4j-simple</artifactId>
-      <version>${slf4j-simple.version}</version>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <!-- Used for UTF8 testing -->
-      <groupId>com.google.protobuf</groupId>
-      <artifactId>protobuf-java</artifactId>
-      <version>${protobuf-java.version}</version>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <!-- Used for xxHash testing -->
-      <groupId>net.openhft</groupId>
-      <artifactId>zero-allocation-hashing</artifactId>
-      <version>${zero-allocation-hashing.version}</version>
-      <scope>test</scope>
-    </dependency>
-    <!-- END: UNIQUE FOR THIS JAVA COMPONENT -->
-
-    <!-- Test Scope -->
-    <dependency>
-      <groupId>org.testng</groupId>
-      <artifactId>testng</artifactId>
-      <version>${testng.version}</version>
-      <scope>test</scope>
-    </dependency>
-  </dependencies>
-
-  <build>
-    <pluginManagement>
-      <plugins>
-
-        <plugin>
-          <groupId>org.codehaus.mojo</groupId>
-          <artifactId>versions-maven-plugin</artifactId>
-          <version>${versions-maven-plugin.version}</version>
-        </plugin>
-
-        <plugin>
-          <!-- We want to deploy the artifacts to a staging location for perusal -->
-          <!-- Apache Parent pom: apache-release profile -->
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-deploy-plugin</artifactId>
-          <version>${maven-deploy-plugin.version}</version>
-        </plugin>
-
-        <plugin>
-          <!-- Apache Parent pom, pluginManagement-->
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-release-plugin</artifactId>
-          <version>${maven-release-plugin.version}</version>
-        </plugin>
-
-        <plugin>
-          <!-- Extends Apache Parent pom, pluginManagement-->
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-jar-plugin</artifactId>
-          <version>${maven-jar-plugin.version}</version>
-          <executions>
-            <execution>
-              <id>default-jar</id>
-              <phase>package</phase>
-              <goals>
-                <goal>jar</goal>
-              </goals>
-            </execution>
-            <execution>
-              <id>default-test-jar</id>
-              <phase>package</phase>
-              <goals>
-                <goal>test-jar</goal>
-              </goals>
-            </execution>
-          </executions>
-        </plugin>
-
-        <plugin>
-          <!-- Extends Apache Parent pom, apache-release profile -->
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-javadoc-plugin</artifactId>
-          <version>${maven-javadoc-plugin.version}</version>
-          <configuration>
-            <docfilessubdirs>true</docfilessubdirs>
-          </configuration>
-          <executions>
-            <execution>
-              <id>attach-javadocs</id>
-              <goals>
-                <goal>jar</goal>
-              </goals>
-            </execution>
-          </executions>
-        </plugin>
-
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-enforcer-plugin</artifactId>
-          <version>${maven-enforcer-plugin.version}</version>
-          <executions>
-            <execution>
-              <id>enforce-banned-dependencies</id>
-              <goals>
-                <goal>enforce</goal>
-              </goals>
-              <configuration>
-                <rules>
-                  <requireJavaVersion>
-                    <version>${java.version}</version>
-                  </requireJavaVersion>
-                  <requireMavenVersion>
-                    <version>${maven.version},</version>
-                  </requireMavenVersion>
-                  <bannedDependencies>
-                    <excludes>
-                      <!--LGPL licensed library-->
-                      <exclude>com.google.code.findbugs:annotations</exclude>
-                    </excludes>
-                  </bannedDependencies>
-                </rules>
-                <fail>true</fail>
-              </configuration>
-            </execution>
-          </executions>
-        </plugin>
-
-        <plugin>
-          <!-- Apache Parent pom, pluginManagement-->
-          <groupId>org.apache.rat</groupId>
-          <artifactId>apache-rat-plugin</artifactId>
-          <version>${apache-rat-plugin.version}</version>
-          <executions>
-            <execution>
-              <phase>verify</phase>
-              <goals>
-                <goal>check</goal>
-              </goals>
-            </execution>
-          </executions>
-          <configuration>
-            <outputDirectory>${project.basedir}/rat</outputDirectory>
-            <consoleOutput>true</consoleOutput>
-            <useDefaultExcludes>true</useDefaultExcludes>
-            <excludes>
-              <!-- rat uses .gitignore for excludes by default -->
-              <exclude>**/*.yaml</exclude>
-              <exclude>**/*.yml</exclude>
-              <exclude>**/.*</exclude>
-              <exclude>**/test/resources/**/*.txt</exclude>
-              <exclude>LICENSE</exclude>
-              <exclude>NOTICE</exclude>
-            </excludes>
-          </configuration>
-        </plugin>
-
-        <plugin>
-          <!-- Extends Apache Parent pom, apache-release profile -->
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-source-plugin</artifactId>
-          <version>${maven-source-plugin.version}</version>
-          <executions>
-            <execution>
-              <id>attach-sources</id>
-              <phase>package</phase>
-              <goals>
-                <goal>jar-no-fork</goal>
-              </goals>
-            </execution>
-            <execution>
-              <id>attach-test-sources</id>
-              <phase>package</phase>
-              <goals>
-                <goal>test-jar-no-fork</goal>
-              </goals>
-            </execution>
-          </executions>
-        </plugin>
-
-        <plugin>
-          <!-- Apache Parent pom, pluginManagement-->
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-surefire-plugin</artifactId>
-          <version>${maven-surefire-plugin.version}</version>
-          <configuration>
-            <trimStackTrace>false</trimStackTrace>
-            <useManifestOnlyJar>false</useManifestOnlyJar>
-            <redirectTestOutputToFile>true</redirectTestOutputToFile>
-          </configuration>
-        </plugin>
-
-        <plugin>
-          <!-- Generates code coverage report from website. -->
-          <groupId>org.jacoco</groupId>
-          <artifactId>jacoco-maven-plugin</artifactId>
-          <version>${jacoco-maven-plugin.version}</version>
-          <executions>
-            <execution>
-              <id>default-prepare-agent</id>
-              <goals>
-                <goal>prepare-agent</goal>
-              </goals>
-            </execution>
-            <execution>
-              <id>default-report</id>
-              <goals>
-                <goal>report</goal>
-              </goals>
-            </execution>
-          </executions>
-        </plugin>
-
-        <plugin>
-          <!-- Submit code coverage report to Coveralls.io. -->
-          <groupId>org.eluder.coveralls</groupId>
-          <artifactId>coveralls-maven-plugin</artifactId>
-          <version>${coveralls-maven-plugin.version}</version>
-          <configuration>
-            <repoToken>${coveralls-repo-token}</repoToken>
-          </configuration>
-        </plugin>
-        
-        <plugin>
-          <groupId>org.eclipse.m2e</groupId>
-          <artifactId>lifecycle-mapping</artifactId>
-          <version>${lifecycle-mapping.version}</version>
-        </plugin>
-        
-        <plugin>
-          <groupId>pl.project13.maven</groupId>
-          <artifactId>git.commit-id-plugin</artifactId>
-          <version>${git-commit-id-plugin.version}</version>
-        </plugin>
-        
-      </plugins>
-    </pluginManagement>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-deploy-plugin</artifactId>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-release-plugin</artifactId>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-jar-plugin</artifactId>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-javadoc-plugin</artifactId>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-enforcer-plugin</artifactId>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.rat</groupId>
-        <artifactId>apache-rat-plugin</artifactId>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-source-plugin</artifactId>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-surefire-plugin</artifactId>
-      </plugin>
-      <plugin>
-        <groupId>org.jacoco</groupId>
-        <artifactId>jacoco-maven-plugin</artifactId>
-      </plugin>
-      <plugin>
-        <groupId>org.eclipse.m2e</groupId>
-        <artifactId>lifecycle-mapping</artifactId>
-      </plugin>
-      <plugin>
-        <groupId>org.eluder.coveralls</groupId>
-        <artifactId>coveralls-maven-plugin</artifactId>
-      </plugin>
-      <plugin>
-        <groupId>pl.project13.maven</groupId>
-        <artifactId>git.commit-id-plugin</artifactId>
-      </plugin>
-    </plugins>
-  </build>
-  <profiles>
-    <!-- Ignore nuisance warning from Apache parent plugin: 
-          "maven-remote-resources-plugin (goal "process") is ignored by m2e".
-          This also should fix the Maven warning that it can't find the lifecycle-mapping jar.
-          This profile is only active when the property "m2e.version" is set, 
-          which is the case when building in Eclipse with m2e.
-          The ignore below tells m2eclipse to skip the execution.
-    -->
-    <profile>
-      <id>m2e</id>
-      <activation>
-        <property>
-          <name>m2e.version</name>
-        </property>
-      </activation>
-      <build>
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.apache</groupId>
+        <artifactId>apache</artifactId>
+        <version>23</version>
+    </parent>
+
+    <groupId>org.apache.datasketches</groupId>
+    <artifactId>datasketches-memory-root</artifactId>
+    <version>1.4.0-SNAPSHOT</version>
+    <packaging>pom</packaging>
+
+    <name>${project.artifactId}</name>
+    <description>High-performance native memory access.</description>
+    <url>https://datasketches.apache.org/</url>
+    <inceptionYear>2015</inceptionYear>
+
+    <mailingLists>
+        <mailingList>
+            <name>DataSketches Developers</name>
+            <subscribe>dev-subscribe@datasketches.apache.org</subscribe>
+            <unsubscribe>dev-unsubscribe@datasketches.apache.org</unsubscribe>
+            <post>dev@datasketches.apache.org</post>
+            <archive>https://mail-archives.apache.org/mod_mbox/datasketches-dev</archive>
+        </mailingList>
+        <mailingList>
+            <name>sketches-user</name>
+            <archive>https://groups.google.com/forum/#!forum/sketches-user</archive>
+            <subscribe>mailto:sketches-user%2Bsubscribe@googlegroups.com</subscribe>
+            <unsubscribe>mailto:sketches-user%2Bunsubscribe@googlegroups.com</unsubscribe>
+            <post>mailto:sketches-user@googlegroups.com</post>
+        </mailingList>
+    </mailingLists>
+
+    <scm>
+        <connection>scm:git:ssh://git@github.com/apache/${project.artifactId}.git</connection>
+        <developerConnection>scm:git:ssh://git@github.com/apache/${project.artifactId}.git</developerConnection>
+        <url>https://github.com/apache/${project.artifactId}</url>
+        <tag>HEAD</tag>
+    </scm>
+
+    <issueManagement>
+        <!-- <system>jira</system>
+          <url>https://issues.apache.org/jira/browse/DATASKETCHES</url> -->
+        <system>GitHub</system>
+        <url>https://github.com/apache/${project.artifactId}/issues</url>
+    </issueManagement>
+
+    <developers>
+        <developer>
+            <name>The Apache DataSketches Team</name>
+            <email>dev@datasketches.apache.org</email>
+            <url>https://datasketches.apache.org</url>
+            <organization>Apache Software Foundation</organization>
+            <organizationUrl>http://www.apache.org</organizationUrl>
+        </developer>
+    </developers>
+
+    <properties>
+        <!-- UNIQUE FOR THIS JAVA COMPONENT -->
+        <slf4j-api.version>1.7.30</slf4j-api.version>
+        <slf4j-simple.version>1.7.30</slf4j-simple.version>
+        <protobuf-java.version>3.6.0</protobuf-java.version>
+        <!-- Used for UTF8 testing -->
+        <zero-allocation-hashing.version>0.8</zero-allocation-hashing.version>
+        <!-- END:UNIQUE FOR THIS JAVA COMPONENT -->
+
+        <!-- Test -->
+        <testng.version>7.1.0</testng.version>
+
+        <!-- System-wide properties -->
+        <maven.version>3.5.0</maven.version>
+        <java.version>11</java.version>
+        <maven.compiler.source>${java.version}</maven.compiler.source>
+        <maven.compiler.target>${java.version}</maven.compiler.target>
+        <argLine>-Xmx4g -Duser.language=en -Duser.country=US -Dfile.encoding=UTF-8</argLine>
+        <charset.encoding>UTF-8</charset.encoding>
+        <project.build.sourceEncoding>${charset.encoding}</project.build.sourceEncoding>
+        <project.build.resourceEncoding>${charset.encoding}</project.build.resourceEncoding>
+        <project.reporting.outputEncoding>${charset.encoding}</project.reporting.outputEncoding>
+
+        <!-- org.codehaus plugins -->
+        <!-- used for strict profile testing-->
+        <plexus-compiler-javac-errorprone.version>2.8.5</plexus-compiler-javac-errorprone.version>
+        <versions-maven-plugin.version>2.8.1</versions-maven-plugin.version>
+
+        <!--  Maven Plugins -->
+        <maven-assembly-plugin.version>3.3.0</maven-assembly-plugin.version> <!-- overrides parent -->
+        <maven-compiler-plugin.version>3.8.1</maven-compiler-plugin.version> <!-- overrides parent -->
+        <maven-deploy-plugin.version>3.0.0-M1</maven-deploy-plugin.version> <!-- overrides parent -->
+        <maven-enforcer-plugin.version>3.0.0-M2</maven-enforcer-plugin.version> <!-- overrides parent -->
+        <maven-gpg-plugin.version>1.6</maven-gpg-plugin.version> <!-- overrides parent -->
+        <maven-jar-plugin.version>3.2.0</maven-jar-plugin.version> <!-- overrides parent -->
+        <maven-javadoc-plugin.version>3.2.0</maven-javadoc-plugin.version> <!-- overrides parent -->
+        <maven-release-plugin.version>3.0.0-M1</maven-release-plugin.version> <!-- overrides parent -->
+        <maven-remote-resources-plugin.version>[1.7.0,)</maven-remote-resources-plugin.version> <!-- overrides parent -->
+        <maven-source-plugin.version>3.2.1</maven-source-plugin.version> <!-- overrides parent -->
+        <maven-surefire-plugin.version>3.0.0-M5</maven-surefire-plugin.version> <!-- overrides parent -->
+        <!-- Apache Plugins -->
+        <apache-rat-plugin.version>0.13</apache-rat-plugin.version> <!-- overrides parent -->
+        <!-- org.jacoco Maven Plugins -->
+        <jacoco-maven-plugin.version>0.8.6</jacoco-maven-plugin.version>
+        <!-- org.eluder Maven Plugins -->
+        <coveralls-repo-token></coveralls-repo-token>
+        <coveralls-maven-plugin.version>4.3.0</coveralls-maven-plugin.version>
+        <!-- other -->
+        <lifecycle-mapping.version>1.0.0</lifecycle-mapping.version>
+        <toolchain.vendor>openjdk</toolchain.vendor>
+        <git-commit-id-plugin.version>4.0.4</git-commit-id-plugin.version>
+    </properties>
+
+    <repositories>
+        <repository>
+            <id>apache.snapshots</id>
+            <name>Apache Snapshot Repository</name>
+            <url>https://repository.apache.org/content/groups/snapshots/org/apache/datasketches/</url>
+            <releases>
+                <enabled>false</enabled>
+            </releases>
+            <snapshots>
+                <enabled>true</enabled>
+            </snapshots>
+        </repository>
+        <repository>
+            <id>apache</id>
+            <name>Apache Releases Repository</name>
+            <url>https://repository.apache.org/content/repositories/releases/org/apache/datasketches/</url>
+            <releases>
+                <enabled>true</enabled>
+            </releases>
+            <snapshots>
+                <enabled>false</enabled>
+            </snapshots>
+        </repository>
+    </repositories>
+
+    <dependencies>
+        <!-- UNIQUE FOR THIS JAVA COMPONENT -->
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-api</artifactId>
+            <version>${slf4j-api.version}</version>
+        </dependency>
+        <!-- Test Scope -->
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-simple</artifactId>
+            <version>${slf4j-simple.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <!-- Used for UTF8 testing -->
+            <groupId>com.google.protobuf</groupId>
+            <artifactId>protobuf-java</artifactId>
+            <version>${protobuf-java.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <!-- Used for xxHash testing -->
+            <groupId>net.openhft</groupId>
+            <artifactId>zero-allocation-hashing</artifactId>
+            <version>${zero-allocation-hashing.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <!-- END: UNIQUE FOR THIS JAVA COMPONENT -->
+
+        <!-- Test Scope -->
+        <dependency>
+            <groupId>org.testng</groupId>
+            <artifactId>testng</artifactId>
+            <version>${testng.version}</version>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+
+    <build>
         <pluginManagement>
-          <plugins>
+            <plugins>
+
+                <plugin>
+                    <groupId>org.codehaus.mojo</groupId>
+                    <artifactId>versions-maven-plugin</artifactId>
+                    <version>${versions-maven-plugin.version}</version>
+                </plugin>
+
+                <plugin>
+                    <!-- We want to deploy the artifacts to a staging location for perusal -->
+                    <!-- Apache Parent pom: apache-release profile -->
+                    <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-deploy-plugin</artifactId>
+                    <version>${maven-deploy-plugin.version}</version>
+                </plugin>
+
+                <plugin>
+                    <!-- Apache Parent pom, pluginManagement-->
+                    <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-release-plugin</artifactId>
+                    <version>${maven-release-plugin.version}</version>
+                </plugin>
+
+                <plugin>
+                    <!-- Extends Apache Parent pom, pluginManagement-->
+                    <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-jar-plugin</artifactId>
+                    <version>${maven-jar-plugin.version}</version>
+                    <executions>
+                        <execution>
+                            <id>default-jar</id>
+                            <phase>package</phase>
+                            <goals>
+                                <goal>jar</goal>
+                            </goals>
+                        </execution>
+                        <execution>
+                            <id>default-test-jar</id>
+                            <phase>package</phase>
+                            <goals>
+                                <goal>test-jar</goal>
+                            </goals>
+                        </execution>
+                    </executions>
+                </plugin>
+
+                <plugin>
+                    <!-- Extends Apache Parent pom, apache-release profile -->
+                    <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-javadoc-plugin</artifactId>
+                    <version>${maven-javadoc-plugin.version}</version>
+                    <configuration>
+                        <docfilessubdirs>true</docfilessubdirs>
+                    </configuration>
+                    <executions>
+                        <execution>
+                            <id>attach-javadocs</id>
+                            <goals>
+                                <goal>jar</goal>
+                            </goals>
+                        </execution>
+                    </executions>
+                </plugin>
+
+                <plugin>
+                    <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-enforcer-plugin</artifactId>
+                    <version>${maven-enforcer-plugin.version}</version>
+                    <executions>
+                        <execution>
+                            <id>enforce-banned-dependencies</id>
+                            <goals>
+                                <goal>enforce</goal>
+                            </goals>
+                            <configuration>
+                                <rules>
+                                    <requireJavaVersion>
+                                        <version>${java.version}</version>
+                                    </requireJavaVersion>
+                                    <requireMavenVersion>
+                                        <version>${maven.version},</version>
+                                    </requireMavenVersion>
+                                    <bannedDependencies>
+                                        <excludes>
+                                            <!--LGPL licensed library-->
+                                            <exclude>com.google.code.findbugs:annotations</exclude>
+                                        </excludes>
+                                    </bannedDependencies>
+                                </rules>
+                                <fail>true</fail>
+                            </configuration>
+                        </execution>
+                    </executions>
+                </plugin>
+
+                <plugin>
+                    <!-- Apache Parent pom, pluginManagement-->
+                    <groupId>org.apache.rat</groupId>
+                    <artifactId>apache-rat-plugin</artifactId>
+                    <version>${apache-rat-plugin.version}</version>
+                    <executions>
+                        <execution>
+                            <phase>verify</phase>
+                            <goals>
+                                <goal>check</goal>
+                            </goals>
+                        </execution>
+                    </executions>
+                    <configuration>
+                        <outputDirectory>${project.basedir}/rat</outputDirectory>
+                        <consoleOutput>true</consoleOutput>
+                        <useDefaultExcludes>true</useDefaultExcludes>
+                        <excludes>
+                            <!-- rat uses .gitignore for excludes by default -->
+                            <exclude>**/*.yaml</exclude>
+                            <exclude>**/*.yml</exclude>
+                            <exclude>**/.*</exclude>
+                            <exclude>**/test/resources/**/*.txt</exclude>
+                            <exclude>LICENSE</exclude>
+                            <exclude>NOTICE</exclude>
+                        </excludes>
+                    </configuration>
+                </plugin>
+
+                <plugin>
+                    <!-- Extends Apache Parent pom, apache-release profile -->
+                    <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-source-plugin</artifactId>
+                    <version>${maven-source-plugin.version}</version>
+                    <executions>
+                        <execution>
+                            <id>attach-sources</id>
+                            <phase>package</phase>
+                            <goals>
+                                <goal>jar-no-fork</goal>
+                            </goals>
+                        </execution>
+                        <execution>
+                            <id>attach-test-sources</id>
+                            <phase>package</phase>
+                            <goals>
+                                <goal>test-jar-no-fork</goal>
+                            </goals>
+                        </execution>
+                    </executions>
+                </plugin>
+
+                <plugin>
+                    <!-- Apache Parent pom, pluginManagement-->
+                    <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-surefire-plugin</artifactId>
+                    <version>${maven-surefire-plugin.version}</version>
+                    <configuration>
+                        <trimStackTrace>false</trimStackTrace>
+                        <useManifestOnlyJar>false</useManifestOnlyJar>
+                        <redirectTestOutputToFile>true</redirectTestOutputToFile>
+                    </configuration>
+                </plugin>
+
+                <plugin>
+                    <!-- Generates code coverage report from website. -->
+                    <groupId>org.jacoco</groupId>
+                    <artifactId>jacoco-maven-plugin</artifactId>
+                    <version>${jacoco-maven-plugin.version}</version>
+                    <executions>
+                        <execution>
+                            <id>default-prepare-agent</id>
+                            <goals>
+                                <goal>prepare-agent</goal>
+                            </goals>
+                        </execution>
+                        <execution>
+                            <id>default-report</id>
+                            <goals>
+                                <goal>report</goal>
+                            </goals>
+                        </execution>
+                    </executions>
+                </plugin>
+
+                <plugin>
+                    <!-- Submit code coverage report to Coveralls.io. -->
+                    <groupId>org.eluder.coveralls</groupId>
+                    <artifactId>coveralls-maven-plugin</artifactId>
+                    <version>${coveralls-maven-plugin.version}</version>
+                    <configuration>
+                        <repoToken>${coveralls-repo-token}</repoToken>
+                    </configuration>
+                </plugin>
+
+                <plugin>
+                    <groupId>org.eclipse.m2e</groupId>
+                    <artifactId>lifecycle-mapping</artifactId>
+                    <version>${lifecycle-mapping.version}</version>
+                </plugin>
+
+                <plugin>
+                    <groupId>pl.project13.maven</groupId>
+                    <artifactId>git.commit-id-plugin</artifactId>
+                    <version>${git-commit-id-plugin.version}</version>
+                </plugin>
+
+            </plugins>
+        </pluginManagement>
+        <plugins>
             <plugin>
-              <groupId>org.eclipse.m2e</groupId>
-              <artifactId>lifecycle-mapping</artifactId>
-              <version>${lifecycle-mapping.version}</version>
-              <configuration>
-                <lifecycleMappingMetadata>
-                  <pluginExecutions>
-                    <pluginExecution>
-                      <pluginExecutionFilter>
-                        <groupId>org.apache.maven.plugins</groupId>
-                        <artifactId>maven-remote-resources-plugin</artifactId>
-                        <versionRange>${maven-remote-resources-plugin.version}</versionRange>
-                        <goals>
-                          <goal>process</goal>
-                        </goals>
-                      </pluginExecutionFilter>
-                      <action>
-                        <ignore/>
-                      </action>
-                    </pluginExecution>
-                  </pluginExecutions>
-                </lifecycleMappingMetadata>
-              </configuration>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-deploy-plugin</artifactId>
             </plugin>
-          </plugins>
-        </pluginManagement>
-      </build>
-    </profile>
-
-    <profile>
-      <id>strict</id>
-      <build>
-        <pluginManagement>
-          <plugins>
             <plugin>
-              <groupId>org.apache.maven.plugins</groupId>
-              <artifactId>maven-compiler-plugin</artifactId>
-              <version>${maven-compiler-plugin.version}</version>
-              <dependencies>
-                <dependency>
-                  <groupId>org.codehaus.plexus</groupId>
-                  <artifactId>plexus-compiler-javac-errorprone</artifactId>
-                  <version>${plexus-compiler-javac-errorprone.version}</version>
-                </dependency>
-              </dependencies>
-              <configuration>
-                <source>${maven.compiler.source}</source>
-                <target>${maven.compiler.target}</target>
-                <compilerId>javac-with-errorprone</compilerId>
-                <forceJavacCompilerUse>true</forceJavacCompilerUse>
-              </configuration>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-release-plugin</artifactId>
             </plugin>
-          </plugins>
-        </pluginManagement>
-      </build>
-    </profile>
-
-    <!--  This profile is used to release signed jars to the Apache Nexus repository. 
-          This must be executed from a git repository set at the proper Release branch (e.g., 1.1.X) 
-          and at a Release Candidate tag (e.g., 1.1.0-RC1).
-          The pom version in the release branch must be properly set to something like: "1.1.0".
-          The pom version in the master would be set to something like: "1.2.0-SNAPSHOT".
-          Test Command: mvn clean verify -Pnexus-jars -DskipTests=true
-          Command: mvn clean deploy -Dnexus-jars
-          Verify Command (from terminal): gpg -v &#45;&#45;verify $ASC $FILE # dashdashverify
-    -->
-    <profile>
-      <id>nexus-jars</id>
-      <build>
-        <pluginManagement>
-          <plugins>
             <plugin>
-              <groupId>pl.project13.maven</groupId>
-              <artifactId>git-commit-id-plugin</artifactId>
-              <version>${git-commit-id-plugin.version}</version>
-              <executions>
-                <execution>
-                  <goals>
-                    <goal>revision</goal>
-                  </goals>
-                  <phase>initialize</phase>
-                </execution>
-              </executions>
-              <configuration>
-                <dotGitDirectory>${project.basedir}/.git</dotGitDirectory>
-                <dateFormatTimeZone>UTC</dateFormatTimeZone>
-                <verbose>false</verbose>
-                <skipPoms>false</skipPoms>
-                <format>json</format>
-                <generateGitPropertiesFile>true</generateGitPropertiesFile>
-                <generateGitPropertiesFilename>${project.build.directory}/git.properties</generateGitPropertiesFilename>
-                <failOnNoGitDirectory>true</failOnNoGitDirectory>
-                <failOnUnableToExtractRepoInfo>true</failOnUnableToExtractRepoInfo>
-                <commitIdGenerationMode>full</commitIdGenerationMode>
-                <includeOnlyProperties>
-                  <includeProperty>git.branch</includeProperty>
-                  <includeProperty>git.commit.id.full</includeProperty>
-                  <includeProperty>git.commit.time</includeProperty>
-                  <includeProperty>git.commit.user.email</includeProperty>
-                  <includeProperty>git.tags</includeProperty>
-                </includeOnlyProperties>
-                <gitDescribe>
-                  <skip>false</skip>
-                  <always>true</always>
-                  <abbrev>7</abbrev>
-                  <dirty>-dirty</dirty>
-                  <tags>true</tags>
-                  <forceLongFormat>true</forceLongFormat>
-                </gitDescribe>
-              </configuration>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-jar-plugin</artifactId>
             </plugin>
-
-            <!-- Extends Apache Parent pom, pluginManagement-->
             <plugin>
-              <groupId>org.apache.maven.plugins</groupId>
-              <artifactId>maven-jar-plugin</artifactId>
-              <version>${maven-jar-plugin.version}</version>
-              <executions>
-                <execution>
-                  <id>default-jar</id>
-                  <goals>
-                    <goal>jar</goal>
-                  </goals>
-                </execution>
-                <execution>
-                  <id>default-test-jar</id>
-                  <goals>
-                    <goal>test-jar</goal>
-                  </goals>
-                </execution>
-              </executions>
-              <configuration>
-                <archive>
-                  <manifest>
-                    <addDefaultEntries>false</addDefaultEntries>
-                    <addDefaultSpecificationEntries>false</addDefaultSpecificationEntries>
-                    <addDefaultImplementationEntries>false</addDefaultImplementationEntries>
-                  </manifest>
-                  <manifestEntries>
-                    <Build-Jdk>${java.version} (${java.vendor} ${java.vm.version})</Build-Jdk>
-                    <Build-OS>${os.name} ${os.arch} ${os.version}</Build-OS>
-                    <Implementation-Vendor>The Apache Software Foundation</Implementation-Vendor>
-                    <GroupId-ArtifactId>${project.groupId}:${project.artifactId}</GroupId-ArtifactId>
-                    <git-branch>${git.branch}</git-branch>
-                    <git-commit-id>${git.commit.id.full}</git-commit-id>
-                    <git-commit-time>${git.commit.time}</git-commit-time>
-                    <git-commit-user-email>${git.commit.user.email}</git-commit-user-email>
-                    <git-commit-tag>${git.tags}</git-commit-tag>
-                  </manifestEntries>
-                </archive>
-              </configuration>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-javadoc-plugin</artifactId>
             </plugin>
-
-            <!-- We want to sign the artifacts, POM, and all attached artifacts -->
             <plugin>
-              <groupId>org.apache.maven.plugins</groupId>
-              <artifactId>maven-gpg-plugin</artifactId>
-              <version>${maven-gpg-plugin.version}</version>
-              <executions>
-                <execution>
-                  <id>sign-artifacts</id>
-                  <phase>verify</phase>
-                  <goals>
-                    <goal>sign</goal>
-                  </goals>
-                </execution>
-              </executions>
-              <configuration>
-                <gpgArguments>
-                  <arg>--verbose</arg>
-                  <!-- prints the algorithm used -->
-                  <arg>--personal-digest-preferences=SHA512</arg>
-                </gpgArguments>
-              </configuration>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-enforcer-plugin</artifactId>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.rat</groupId>
+                <artifactId>apache-rat-plugin</artifactId>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-source-plugin</artifactId>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+            </plugin>
+            <plugin>
+                <groupId>org.jacoco</groupId>
+                <artifactId>jacoco-maven-plugin</artifactId>
+            </plugin>
+            <plugin>
+                <groupId>org.eclipse.m2e</groupId>
+                <artifactId>lifecycle-mapping</artifactId>
+            </plugin>
+            <plugin>
+                <groupId>org.eluder.coveralls</groupId>
+                <artifactId>coveralls-maven-plugin</artifactId>
+            </plugin>
+            <plugin>
+                <groupId>pl.project13.maven</groupId>
+                <artifactId>git.commit-id-plugin</artifactId>
             </plugin>
-          </plugins>
-        </pluginManagement>
-
-        <plugins>
-          <plugin>
-            <groupId>pl.project13.maven</groupId>
-            <artifactId>git-commit-id-plugin</artifactId>
-          </plugin>
-          <plugin>
-            <groupId>org.apache.maven.plugins</groupId>
-            <artifactId>maven-jar-plugin</artifactId>
-          </plugin>
-          <plugin>
-            <groupId>org.apache.maven.plugins</groupId>
-            <artifactId>maven-gpg-plugin</artifactId>
-          </plugin>
-        </plugins>
-      </build>
-    </profile>
-    <!-- Disable source release assembly for 'apache-release' profile. 
-             This is performed from a script outside Maven
-    -->
-    <profile>
-      <id>apache-release</id>
-      <build>
-        <plugins>
-          <plugin>
-            <artifactId>maven-assembly-plugin</artifactId>
-            <version>${maven-assembly-plugin.version}</version>
-            <executions>
-              <execution>
-                <id>source-release-assembly</id>
-                <phase>none</phase>
-              </execution>
-            </executions>
-          </plugin>
         </plugins>
-      </build>
-    </profile>
-  </profiles>
+    </build>
+    <profiles>
+        <!-- Ignore nuisance warning from Apache parent plugin:
+              "maven-remote-resources-plugin (goal "process") is ignored by m2e".
+              This also should fix the Maven warning that it can't find the lifecycle-mapping jar.
+              This profile is only active when the property "m2e.version" is set,
+              which is the case when building in Eclipse with m2e.
+              The ignore below tells m2eclipse to skip the execution.
+        -->
+        <profile>
+            <id>m2e</id>
+            <activation>
+                <property>
+                    <name>m2e.version</name>
+                </property>
+            </activation>
+            <build>
+                <pluginManagement>
+                    <plugins>
+                        <plugin>
+                            <groupId>org.eclipse.m2e</groupId>
+                            <artifactId>lifecycle-mapping</artifactId>
+                            <version>${lifecycle-mapping.version}</version>
+                            <configuration>
+                                <lifecycleMappingMetadata>
+                                    <pluginExecutions>
+                                        <pluginExecution>
+                                            <pluginExecutionFilter>
+                                                <groupId>org.apache.maven.plugins</groupId>
+                                                <artifactId>maven-remote-resources-plugin</artifactId>
+                                                <versionRange>${maven-remote-resources-plugin.version}</versionRange>
+                                                <goals>
+                                                    <goal>process</goal>
+                                                </goals>
+                                            </pluginExecutionFilter>
+                                            <action>
+                                                <ignore/>
+                                            </action>
+                                        </pluginExecution>
+                                    </pluginExecutions>
+                                </lifecycleMappingMetadata>
+                            </configuration>
+                        </plugin>
+                    </plugins>
+                </pluginManagement>
+            </build>
+        </profile>
+
+        <profile>
+            <id>strict</id>
+            <build>
+                <pluginManagement>
+                    <plugins>
+                        <plugin>
+                            <groupId>org.apache.maven.plugins</groupId>
+                            <artifactId>maven-compiler-plugin</artifactId>
+                            <version>${maven-compiler-plugin.version}</version>
+                            <dependencies>
+                                <dependency>
+                                    <groupId>org.codehaus.plexus</groupId>
+                                    <artifactId>plexus-compiler-javac-errorprone</artifactId>
+                                    <version>${plexus-compiler-javac-errorprone.version}</version>
+                                </dependency>
+                            </dependencies>
+                            <configuration>
+                                <source>${maven.compiler.source}</source>
+                                <target>${maven.compiler.target}</target>
+                                <compilerId>javac-with-errorprone</compilerId>
+                                <forceJavacCompilerUse>true</forceJavacCompilerUse>
+                            </configuration>
+                        </plugin>
+                    </plugins>
+                </pluginManagement>
+            </build>
+        </profile>
+
+        <!--  This profile is used to release signed jars to the Apache Nexus repository.
+              This must be executed from a git repository set at the proper Release branch (e.g., 1.1.X)
+              and at a Release Candidate tag (e.g., 1.1.0-RC1).
+              The pom version in the release branch must be properly set to something like: "1.1.0".
+              The pom version in the master would be set to something like: "1.2.0-SNAPSHOT".
+              Test Command: mvn clean verify -Pnexus-jars -DskipTests=true
+              Command: mvn clean deploy -Dnexus-jars
+              Verify Command (from terminal): gpg -v &#45;&#45;verify $ASC $FILE # dashdashverify
+        -->
+        <profile>
+            <id>nexus-jars</id>
+            <build>
+                <pluginManagement>
+                    <plugins>
+                        <plugin>
+                            <groupId>pl.project13.maven</groupId>
+                            <artifactId>git-commit-id-plugin</artifactId>
+                            <version>${git-commit-id-plugin.version}</version>
+                            <executions>
+                                <execution>
+                                    <goals>
+                                        <goal>revision</goal>
+                                    </goals>
+                                    <phase>initialize</phase>
+                                </execution>
+                            </executions>
+                            <configuration>
+                                <dotGitDirectory>${project.basedir}/.git</dotGitDirectory>
+                                <dateFormatTimeZone>UTC</dateFormatTimeZone>
+                                <verbose>false</verbose>
+                                <skipPoms>false</skipPoms>
+                                <format>json</format>
+                                <generateGitPropertiesFile>true</generateGitPropertiesFile>
+                                <generateGitPropertiesFilename>${project.build.directory}/git.properties</generateGitPropertiesFilename>
+                                <failOnNoGitDirectory>true</failOnNoGitDirectory>
+                                <failOnUnableToExtractRepoInfo>true</failOnUnableToExtractRepoInfo>
+                                <commitIdGenerationMode>full</commitIdGenerationMode>
+                                <includeOnlyProperties>
+                                    <includeProperty>git.branch</includeProperty>
+                                    <includeProperty>git.commit.id.full</includeProperty>
+                                    <includeProperty>git.commit.time</includeProperty>
+                                    <includeProperty>git.commit.user.email</includeProperty>
+                                    <includeProperty>git.tags</includeProperty>
+                                </includeOnlyProperties>
+                                <gitDescribe>
+                                    <skip>false</skip>
+                                    <always>true</always>
+                                    <abbrev>7</abbrev>
+                                    <dirty>-dirty</dirty>
+                                    <tags>true</tags>
+                                    <forceLongFormat>true</forceLongFormat>
+                                </gitDescribe>
+                            </configuration>
+                        </plugin>
+
+                        <!-- Extends Apache Parent pom, pluginManagement-->
+                        <plugin>
+                            <groupId>org.apache.maven.plugins</groupId>
+                            <artifactId>maven-jar-plugin</artifactId>
+                            <version>${maven-jar-plugin.version}</version>
+                            <executions>
+                                <execution>
+                                    <id>default-jar</id>
+                                    <goals>
+                                        <goal>jar</goal>
+                                    </goals>
+                                </execution>
+                                <execution>
+                                    <id>default-test-jar</id>
+                                    <goals>
+                                        <goal>test-jar</goal>
+                                    </goals>
+                                </execution>
+                            </executions>
+                            <configuration>
+                                <archive>
+                                    <manifest>
+                                        <addDefaultEntries>false</addDefaultEntries>
+                                        <addDefaultSpecificationEntries>false</addDefaultSpecificationEntries>
+                                        <addDefaultImplementationEntries>false</addDefaultImplementationEntries>
+                                    </manifest>
+                                    <manifestEntries>
+                                        <Build-Jdk>${java.version} (${java.vendor} ${java.vm.version})</Build-Jdk>
+                                        <Build-OS>${os.name} ${os.arch} ${os.version}</Build-OS>
+                                        <Implementation-Vendor>The Apache Software Foundation</Implementation-Vendor>
+                                        <GroupId-ArtifactId>${project.groupId}:${project.artifactId}</GroupId-ArtifactId>
+                                        <git-branch>${git.branch}</git-branch>
+                                        <git-commit-id>${git.commit.id.full}</git-commit-id>
+                                        <git-commit-time>${git.commit.time}</git-commit-time>
+                                        <git-commit-user-email>${git.commit.user.email}</git-commit-user-email>
+                                        <git-commit-tag>${git.tags}</git-commit-tag>
+                                    </manifestEntries>
+                                </archive>
+                            </configuration>
+                        </plugin>
+
+                        <!-- We want to sign the artifacts, POM, and all attached artifacts -->
+                        <plugin>
+                            <groupId>org.apache.maven.plugins</groupId>
+                            <artifactId>maven-gpg-plugin</artifactId>
+                            <version>${maven-gpg-plugin.version}</version>
+                            <executions>
+                                <execution>
+                                    <id>sign-artifacts</id>
+                                    <phase>verify</phase>
+                                    <goals>
+                                        <goal>sign</goal>
+                                    </goals>
+                                </execution>
+                            </executions>
+                            <configuration>
+                                <gpgArguments>
+                                    <arg>--verbose</arg>
+                                    <!-- prints the algorithm used -->
+                                    <arg>--personal-digest-preferences=SHA512</arg>
+                                </gpgArguments>
+                            </configuration>
+                        </plugin>
+                    </plugins>
+                </pluginManagement>
+
+                <plugins>
+                    <plugin>
+                        <groupId>pl.project13.maven</groupId>
+                        <artifactId>git-commit-id-plugin</artifactId>
+                    </plugin>
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-jar-plugin</artifactId>
+                    </plugin>
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-gpg-plugin</artifactId>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+        <!-- Disable source release assembly for 'apache-release' profile.
+                 This is performed from a script outside Maven
+        -->
+        <profile>
+            <id>apache-release</id>
+            <build>
+                <plugins>
+                    <plugin>
+                        <artifactId>maven-assembly-plugin</artifactId>
+                        <version>${maven-assembly-plugin.version}</version>
+                        <executions>
+                            <execution>
+                                <id>source-release-assembly</id>
+                                <phase>none</phase>
+                            </execution>
+                        </executions>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+    </profiles>
+
+    <modules>
+        <module>datasketches-memory-base</module>
+        <module>datasketches-memory-java11</module>
+        <module>datasketches-memory-multirelease</module>
+    </modules>
+
 </project>

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@datasketches.apache.org
For additional commands, e-mail: commits-help@datasketches.apache.org