Support JAR-bundled native libs: extract + System.load() + SymbolLookup.loaderLookup() #153
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
This PR enables java-tree-sitter to load a bundled native tree-sitter binary shipped inside the project JAR. Instead of relying solely on System.loadLibrary(...) / the OS java.library.path, we extract the appropriate native artifact (per OS + arch) from the JAR to a temporary file at runtime and call System.load(). After the library is loaded with System.load, we use SymbolLookup.loaderLookup() to resolve native symbols via the Foreign Function & Memory API (FFM).
The change simplifies usage for downstream consumers (no manual make install or JAVA_LIBRARY_PATH fiddling for common platforms), while preserving the previous system-level lookup fallback.
Motivation
As discussed in the issue thread, running tests or sample code on platforms such as macOS (M1/M2) fails when libtree-sitter is not installed in the system library path. Users currently must:
This PR addresses that friction by allowing the library to be bundled in the JAR and loaded automatically at runtime. It also aligns with the design of SymbolLookup.loaderLookup() which is intended to see libraries previously loaded via System.load / System.loadLibrary.
What this PR changes
Issues fixed
Close #80
Close #81