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:50 UTC

[datasketches-memory] branch multi-module-experimental created (now 57b9bf9)

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

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


      at 57b9bf9  Introduce maven multi-module configuration

This branch includes the following new commits:

     new 57b9bf9  Introduce maven multi-module configuration

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


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


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

Posted by dc...@apache.org.
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