diff --git a/pom.xml b/pom.xml
index b799caf89..a2791d417 100644
--- a/pom.xml
+++ b/pom.xml
@@ -27,7 +27,7 @@ under the License.
org.apache.datasketches
datasketches-java
- 9.0.1-SNAPSHOT
+ 9.1.0-SNAPSHOT
jar
${project.artifactId}
@@ -95,34 +95,70 @@ under the License.
+
+
+ apache.snapshots
+ Apache Snapshot Repository
+ https://repository.apache.org/content/groups/snapshots
+
+ false
+
+
+ true
+
+
+
+ apache
+ Apache Releases Repository
+ https://repository.apache.org/content/groups/public
+
+ true
+
+
+ false
+
+
+
+
-
+
+ 3.9.12
+ 2026-01-01T00:00:00Z
+ yyyy-MM-dd'T'HH-mm-ss'Z'
+
+
+ 25
+ ${java.version}
+ true
+
+
7.12.0
+ 2.0.12
generate_java_files
check_cpp_files
check_go_files
check_cpp_historical_files
-
- 3.9.12
- 25
- ${java.version}
+
-Xmx4g
-Duser.language=en
-Duser.country=US
-Dfile.encoding=UTF-8
${jvm.mem} ${jvm.locale.language} ${jvm.locale.country} ${jvm.locale.encoding}
+
+
+
UTF-8
- 2026-01-09T19:00:20Z
${charset.encoding}
${charset.encoding}
${charset.encoding}
${charset.encoding}
${project.build.directory}/site
- yyyy-MM-dd'T'HH-mm-ss'Z'
+ 3.8.0
+ 3.5.0
3.15.0
3.1.4
3.6.2
@@ -131,67 +167,77 @@ under the License.
3.4.2
3.12.0
3.3.1
+ 3.5.0
3.4.0
3.5.4
3.2.0
-
- 0.17
+
+
+
+ 0.18
+ 1.8
-
+
5.0.0
-
- 9.0.2
-
-
+
0.8.14
-
- 1.0.0
-
-
+
+ 1.7.0
-
-
- apache.snapshots
- Apache Snapshot Repository
- https://repository.apache.org/content/groups/snapshots
-
- false
-
-
- true
-
-
-
- apache
- Apache Releases Repository
- https://repository.apache.org/content/groups/public
-
- true
-
-
- false
-
-
-
+
-
org.testng
testng
${testng.version}
test
+
+ org.slf4j
+ slf4j-simple
+ ${org-slf4j.version}
+ test
+
+
+ org.apache.maven.plugins
+ maven-assembly-plugin
+ ${maven-assembly-plugin.version}
+ false
+
+
+ source-release-assembly
+ package
+
+ single
+
+
+ true
+
+ src/assembly/source-release.xml
+
+ posix
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-clean-plugin
+ ${maven-clean-plugin.version}
+
+
org.apache.maven.plugins
maven-compiler-plugin
@@ -219,11 +265,11 @@ under the License.
-
[${maven.version},4.0.0)
@@ -241,6 +287,25 @@ under the License.
+
+ org.apache.maven.plugins
+ maven-gpg-plugin
+ ${maven-gpg-plugin.version}
+
+
+ sign-artifacts
+ verify
+ sign
+
+
+
+
+ --verbose
+ --personal-digest-preferences=SHA512
+
+
+
+
org.apache.maven.plugins
maven-install-plugin
@@ -255,18 +320,48 @@ under the License.
default-jar
package
-
- jar
-
+ jar
+
+ true
+
+
+ org.apache.datasketches_java
+
+
+
default-test-jar
package
-
- test-jar
-
+ test-jar
+
+ true
+
+
+ org.apache.datasketches_java.tests
+
+
+
+
+
+
+
+ ${java.runtime.version}
+ ${os.name} ${os.arch} ${os.version}
+ The Apache Software Foundation
+ ${project.groupId}:${project.artifactId}
+ ${git.branch}
+ ${git.commit.id.full}
+ ${git.commit.time}
+ ${git.build.user.email}
+
+
+
@@ -274,23 +369,45 @@ under the License.
maven-javadoc-plugin
${maven-javadoc-plugin.version}
+ en_US
${project.reporting.outputDirectory}
true
public
none
+ true
-J${jvm.mem}
-J${jvm.locale.language}
-J${jvm.locale.country}
-J${jvm.locale.encoding}
+
+
+
+ ${java.runtime.version}
+ ${os.name} ${os.arch} ${os.version}
+ The Apache Software Foundation
+ ${project.groupId}:${project.artifactId}
+ ${git.branch}
+ ${git.commit.id.full}
+ ${git.commit.time}
+ ${git.build.user.email}
+
+
+
+
+
attach-javadocs
-
- jar
-
+ package
+ jar
@@ -301,6 +418,12 @@ under the License.
${maven-release-plugin.version}
+
+ org.apache.maven.plugins
+ maven-resources-plugin
+ ${maven-resources-plugin.version}
+
+
org.apache.maven.plugins
maven-source-plugin
@@ -309,18 +432,31 @@ under the License.
attach-sources
package
-
- jar-no-fork
-
+ jar-no-fork
attach-test-sources
package
-
- test-jar-no-fork
-
+ test-jar-no-fork
+
+
+
+
+ ${java.runtime.version}
+ ${os.name} ${os.arch} ${os.version}
+ The Apache Software Foundation
+ ${project.groupId}:${project.artifactId}
+ ${git.branch}
+ ${git.commit.id.full}
+ ${git.commit.time}
+ ${git.build.user.email}
+
+
+
@@ -328,16 +464,19 @@ under the License.
maven-surefire-plugin
${maven-surefire-failsafe-plugins.version}
- @{argLine} ${jvm.args}
+ @{argLine} ${jvm.args} -Dorg.slf4j.simpleLogger.log.org.testng=warn
false
+ true
false
- false
- ${project.build.directory}/test-output
-
- src/test/resources/testng.xml
-
- ${testng.generate-java-files},${testng.check-cpp-files},${testng.check-go-files},${testng.check-cpp-historical-files}
+ true
+ ${project.build.directory}/test-output/${maven.build.timestamp}
false
+
+
+ verbose
+ 0
+
+
@@ -347,9 +486,7 @@ under the License.
${maven-toolchains-plugin.version}
-
- toolchain
-
+ toolchain
@@ -361,34 +498,39 @@ under the License.
+
+
org.apache.rat
apache-rat-plugin
${apache-rat-plugin.version}
+ true
verify
-
- check
-
+ check
- ${project.basedir}/rat
+ false
+ ${project.build.directory}/rat
true
-
- StandardCollection
+ StandardCollection
**/*.yaml
**/*.yml
**/.*
- **/test/resources/**/*.txt
- **/git.properties
+ **/test-output/**/*
+
**/doc/**
+ **/docs/**
**/*.sk
LICENSE
NOTICE
**/*.code-workspace
+ **/*.txt
+ **/*.html
+ **/api-links.bin
@@ -403,12 +545,6 @@ under the License.
-
- io.github.git-commit-id
- git-commit-id-maven-plugin
- ${git-commit-id-maven-plugin.version}
-
-
org.jacoco
@@ -431,6 +567,16 @@ under the License.
+
+ org.sonatype.plugins
+ nexus-staging-maven-plugin
+ ${nexus-staging-maven-plugin.version}
+
+ apache.releases.https
+ https://repository.apache.org/
+ false
+
+
@@ -438,19 +584,27 @@ under the License.
org.apache.maven.plugins
- maven-compiler-plugin
+ maven-assembly-plugin
org.apache.maven.plugins
- maven-deploy-plugin
+ maven-clean-plugin
+
+
+
+
org.apache.maven.plugins
maven-enforcer-plugin
+
+
+
+
org.apache.maven.plugins
maven-jar-plugin
@@ -466,34 +620,32 @@ under the License.
maven-release-plugin
+
+
org.apache.maven.plugins
maven-source-plugin
-
- org.apache.maven.plugins
- maven-surefire-plugin
-
+
org.apache.maven.plugins
maven-toolchains-plugin
-
- org.apache.rat
- apache-rat-plugin
-
+
com.github.hazendaz.maven
coveralls-maven-plugin
+
+
- io.github.git-commit-id
- git-commit-id-maven-plugin
+ org.apache.rat
+ apache-rat-plugin
@@ -501,6 +653,8 @@ under the License.
jacoco-maven-plugin
+
+
@@ -512,141 +666,23 @@ under the License.
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
+ Command: mvn clean deploy -Pnexus-jars -DskipTests=true
Verify Command (from terminal): gpg -v --verify $ASC $FILE # dashdashverify
-->
nexus-jars
-
-
-
- io.github.git-commit-id
- git-commit-id-maven-plugin
- ${git-commit-id-maven-plugin.version}
-
-
- get-the-git-infos
-
- revision
-
- initialize
-
-
-
- ${project.basedir}/.git
- UTC
- false
- false
- json
- true
- ${project.build.directory}/git.properties
-
- false
- true
- full
-
- git.branch
- git.commit.id.full
- git.commit.time
- git.commit.user.email
- git.tags
-
-
- false
- true
- 7
- -dirty
- true
- true
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-jar-plugin
- ${maven-jar-plugin.version}
-
-
- default-jar
-
- jar
-
-
-
- default-test-jar
-
- test-jar
-
-
-
-
-
-
- false
- false
- true
- true
-
-
- org.apache.datasketches
- The Apache Software Foundation
- ${project.groupId}:${project.artifactId}
-
-
- ${git.branch}
-
- ${git.commit.id.full}
-
- ${git.commit.time}
-
- ${git.commit.user.email}
-
- ${git.tags}
-
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-gpg-plugin
- ${maven-gpg-plugin.version}
-
-
- sign-artifacts
- verify
-
- sign
-
-
-
-
-
- --verbose
-
- --personal-digest-preferences=SHA512
-
-
-
-
-
-
-
- io.github.git-commit-id
- git-commit-id-maven-plugin
-
+
org.apache.maven.plugins
- maven-jar-plugin
+ maven-gpg-plugin
+
- org.apache.maven.plugins
- maven-gpg-plugin
+ org.sonatype.plugins
+ nexus-staging-maven-plugin
+ true
@@ -655,73 +691,64 @@ under the License.
generate-java-files
-
-
-
- org.apache.maven.plugins
- maven-surefire-plugin
-
- ${testng.generate-java-files}
- ${testng.check-cpp-files},${testng.check-go-files},${testng.check-cpp-historical-files}
-
-
-
-
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
+ ${testng.generate-java-files}
+ ${testng.check-cpp-files},${testng.check-go-files},${testng.check-cpp-historical-files}
+
+
+
check-cpp-files
-
-
-
- org.apache.maven.plugins
- maven-surefire-plugin
-
- ${testng.check-cpp-files}
- ${testng.generate-java-files},${testng.check-go-files},${testng.check-cpp-historical-files}
-
-
-
-
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
+ ${testng.check-cpp-files}
+ ${testng.generate-java-files},${testng.check-go-files},${testng.check-cpp-historical-files}
+
+
+
check-go-files
-
-
-
- org.apache.maven.plugins
- maven-surefire-plugin
-
- ${testng.check-go-files}
- ${testng.generate-java-files},${testng.check-cpp-files},${testng.check-cpp-historical-files}
-
-
-
-
-
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
+ ${testng.check-go-files}
+ ${testng.generate-java-files},${testng.check-cpp-files},${testng.check-cpp-historical-files}
+
+
+
check-cpp-historical-files
-
-
-
- org.apache.maven.plugins
- maven-surefire-plugin
-
- ${testng.check-cpp-historical-files}
- ${testng.generate-java-files},${testng.check-go-files},${testng.check-cpp-files}
-
-
-
-
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
+ ${testng.check-cpp-historical-files}
+ ${testng.generate-java-files},${testng.check-go-files},${testng.check-cpp-files}
+
+
+
diff --git a/src/assembly/source-release.xml b/src/assembly/source-release.xml
new file mode 100644
index 000000000..1d8d7ecb6
--- /dev/null
+++ b/src/assembly/source-release.xml
@@ -0,0 +1,46 @@
+
+
+ source-release
+
+ zip
+
+
+
+ ${project.basedir}
+ /
+ true
+
+
+ **/.git/**
+ **/target/**
+
+
+ **/.vscode/**
+ **/.settings/**
+ **/.asf.yaml
+ **/.classpath
+ **/.project
+ **/serialization_test_data/**
+
+
+
+
diff --git a/src/main/java/org/apache/datasketches/PackageDocumentation.java b/src/main/java/org/apache/datasketches/PackageDocumentation.java
new file mode 100644
index 000000000..8b4d678e2
--- /dev/null
+++ b/src/main/java/org/apache/datasketches/PackageDocumentation.java
@@ -0,0 +1,25 @@
+/*
+ * 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.
+ */
+package org.apache.datasketches;
+
+/**
+ * Internal package marker to satisfy JDK Javadoc source requirements for empty packages in jar files.
+ */
+@SuppressWarnings("unused")
+interface PackageDocumentation {}
diff --git a/src/main/java/org/apache/datasketches/filters/PackageDocumentation.java b/src/main/java/org/apache/datasketches/filters/PackageDocumentation.java
new file mode 100644
index 000000000..04d6e2544
--- /dev/null
+++ b/src/main/java/org/apache/datasketches/filters/PackageDocumentation.java
@@ -0,0 +1,25 @@
+/*
+ * 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.
+ */
+package org.apache.datasketches.filters;
+
+/**
+ * Internal package marker to satisfy JDK Javadoc source requirements for empty packages in jar files.
+ */
+@SuppressWarnings("unused")
+interface PackageDocumentation {}
diff --git a/tools/mvn_clean_install_or_deploy.sh b/tools/mvn_clean_install_or_deploy.sh
new file mode 100755
index 000000000..ff3463175
--- /dev/null
+++ b/tools/mvn_clean_install_or_deploy.sh
@@ -0,0 +1,38 @@
+#!/usr/bin/env bash
+set -e
+
+# Default goal to 'install' if no argument provided
+# Otherwise specify 'deploy', in which case it also adds: -DskipTests" -Pnexus-jars
+GOAL="${1:-install}"
+shift 1 2>/dev/null || true
+
+# Set goal-specific defaults
+EXTRA_ARGS=()
+if [ "$GOAL" = "deploy" ]; then
+ EXTRA_ARGS=("-DskipTests" "-Pnexus-jars")
+fi
+
+# Safe Git metadata extraction with fallbacks for non-git builds
+if git rev-parse --is-inside-work-tree >/dev/null 2>&1; then
+ BRANCH=$(git rev-parse --abbrev-ref HEAD 2>/dev/null)
+ [ "$BRANCH" = "HEAD" ] && BRANCH=$(git name-rev --name-only HEAD 2>/dev/null)
+
+ COMMIT=$(git rev-parse HEAD 2>/dev/null || echo "unknown")
+ TIME=$(git log -1 --format=%cI 2>/dev/null || echo "unknown")
+ EMAIL=$(git config user.email 2>/dev/null)
+ [ -z "$EMAIL" ] && EMAIL="unknown"
+else
+ BRANCH="source-release-no-git"
+ COMMIT="unknown"
+ TIME="unknown"
+ EMAIL="unknown"
+fi
+
+# Execute Maven clean + target goal with injected system properties
+exec mvn clean "$GOAL" \
+ "${EXTRA_ARGS[@]}" \
+ -Dgit.branch="${BRANCH:-source-release-no-git}" \
+ -Dgit.commit.id.full="${COMMIT:-unknown}" \
+ -Dgit.commit.time="${TIME:-unknown}" \
+ -Dgit.build.user.email="${EMAIL:-unknown}" \
+ "$@"