generate and package jni lib in jar + load lib from jar without assuming it in java.library.path #1
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.
Can't use artifact as it as:
When we build circe-crc32c-sse42 using maven build:
jni
library under.nar
artifact. e.g:circe-crc32c-sse42.nar
NarSystem.java
which tries to load thisjni
library at runtime usingSystem.loadLibrary("circe-crc32c-sse42-0.1-SNAPSHOT");
which fails obviously because it asksClassLoader
to load library fromjava.library.path
orsun.boot.library.path
. And as thisjni
library is packaged under.nar
so, definitely it is not present in eitherlibrary.path
and hence, initialization of the interface which provides API to compute checksum Sse42Crc32C.java fails.Solution
circe-crc32c-sse42.jar
insteadcirce-crc32c-sse42.nar
artifact and internally loads generatedjni
library without messing up withlibrary.path
and user can use this artifact without performing any additional magic.I have also added a test case which cleanly uses
Sse42Crc32C.java
to compute checksum by simply adding dependency of artifactcom.scurrilous:circe-crc32c-sse42:${project.version}
and without worrying about configuringlibrary.path
.