mirror of
https://github.com/xerial/snappy-java.git
synced 2025-12-05 12:50:33 +01:00
* Add Enable-Native-Access manifest attribute for JDK 24+ Add the Enable-Native-Access: ALL-UNNAMED attribute to the JAR manifest to suppress native access warnings on JDK 24+ without requiring users to add the --enable-native-access=ALL-UNNAMED command-line flag. This manifest attribute allows the library to declare its need for native access, which helps suppress the warnings introduced by JEP 472 when snappy-java loads native libraries via JNI. Benefits: - Users no longer need to add JVM flags for basic usage - Warnings are suppressed automatically when the JAR is on the classpath - Backwards compatible with all JDK versions (attribute is ignored on JDK < 24) Related to #689 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> * Add integration test for JAR manifest and native access Add a comprehensive integration test that verifies snappy-java works in a separate JVM process. This test: 1. Builds the JAR with sbt 2. Compiles a simple test program that uses snappy-java 3. Runs the test in a fresh JVM WITHOUT --enable-native-access flag 4. Verifies the compression/decompression works correctly 5. Checks for JEP 472 warnings on JDK 24+ The test can be run two ways: - Via JUnit: testOnly org.xerial.snappy.JarManifestIntegrationTest - Via script: ./script/test-jar-integration.sh Findings: The Enable-Native-Access manifest attribute is present but does NOT suppress warnings when the JAR is used as a library on the classpath. The attribute only works for executable JARs (java -jar). Users still need to add --enable-native-access=ALL-UNNAMED for now. Related to #689 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> * Clean up and finalize integration test Changes: - Remove Enable-Native-Access manifest attribute (doesn't work for library JARs) - Remove unused JUnit integration test (using shell script instead) - Add JAR integration test to CI workflow for all JDK versions The integration test now runs in CI after regular tests, verifying that the built JAR works correctly in a separate JVM process on each tested JDK version (8, 11, 17, 21, 25). Related to #689 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> * Remove unnecessary manifest check from integration test The manifest check is no longer needed since we decided not to include the Enable-Native-Access attribute. Related to #689 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Claude <noreply@anthropic.com>
62 lines
1.5 KiB
Bash
Executable File
62 lines
1.5 KiB
Bash
Executable File
#!/bin/bash
|
|
set -e
|
|
|
|
echo "=========================================="
|
|
echo "Snappy-Java Integration Test"
|
|
echo "=========================================="
|
|
|
|
# Detect Java version
|
|
JAVA_VERSION=$(java -version 2>&1 | head -1 | cut -d'"' -f2 | sed 's/^1\.//' | cut -d'.' -f1)
|
|
echo "Java version: $JAVA_VERSION"
|
|
|
|
# Build the JAR
|
|
echo ""
|
|
echo "Building JAR..."
|
|
./sbt package
|
|
|
|
# Find the JAR
|
|
JAR_FILE=$(ls -t target/snappy-java-*.jar | grep -v sources | grep -v javadoc | head -1)
|
|
if [ -z "$JAR_FILE" ]; then
|
|
echo "ERROR: Could not find snappy-java JAR"
|
|
exit 1
|
|
fi
|
|
echo "Using JAR: $JAR_FILE"
|
|
|
|
# Create temp directory
|
|
TEMP_DIR=$(mktemp -d)
|
|
echo ""
|
|
echo "Using temp directory: $TEMP_DIR"
|
|
|
|
# Copy test source
|
|
cp src/test/resources/integration/SnappyIntegrationTest.java "$TEMP_DIR/"
|
|
|
|
# Compile test
|
|
echo ""
|
|
echo "Compiling test program..."
|
|
javac -cp "$JAR_FILE" -d "$TEMP_DIR" "$TEMP_DIR/SnappyIntegrationTest.java"
|
|
|
|
# Run test WITHOUT --enable-native-access flag
|
|
echo ""
|
|
echo "=========================================="
|
|
echo "Running test (WITHOUT --enable-native-access flag)..."
|
|
echo "=========================================="
|
|
|
|
cd "$TEMP_DIR"
|
|
java -cp ".:$OLDPWD/$JAR_FILE" SnappyIntegrationTest 2>&1
|
|
EXIT_CODE=$?
|
|
cd - > /dev/null
|
|
|
|
echo ""
|
|
echo "=========================================="
|
|
if [ $EXIT_CODE -eq 0 ]; then
|
|
echo "✓ Test PASSED (exit code: $EXIT_CODE)"
|
|
else
|
|
echo "✗ Test FAILED (exit code: $EXIT_CODE)"
|
|
fi
|
|
echo "=========================================="
|
|
|
|
# Cleanup
|
|
rm -rf "$TEMP_DIR"
|
|
|
|
exit $EXIT_CODE
|