Introduction
Steps to bundle the native libraries to be pushed to Nexus, and to unpack the native libraries on mvn package.
Bundling Native Libraries into a JAR File
Let’s assume we have the following native libraries for multiple platforms:-
tree native
native
├── linux
│ ├── x86
│ │ └── libnative_synchronization.so
│ └── x86_64
│ └── libnative_synchronization.so
├── macosx
│ └── libnative_synchronization.jnilib
└── win32
├── x86
│ └── native_synchronization.dll
└── x86_64
└── native_synchronization.dll
Create a jar that contains these native libraries. The -C options prevents the native folder from being created in the JAR file.
jar cMf my-project-native.jar -C native .
Pushing JAR to Nexus
When pushing this native JAR file to Nexus, make sure to use the natives-* classifier. In this example, I called it natives-all.
<dependency>
<groupid>my.project</groupid>
<artifactid>native</artifactid>
<version>1.0</version>
<classifier>natives-all</classifier>
</dependency>
Configuring pom.xml
First, add LWJGL and the native JAR dependencies.
<dependencies>
<dependency>
<groupid>org.lwjgl.lwjgl</groupid>
<artifactid>lwjgl</artifactid>
<version>2.9.3</version>
</dependency>
<dependency>
<groupid>my.project</groupid>
<artifactid>native</artifactid>
<version>1.0</version>
<classifier>natives-all</classifier>
</dependency>
</dependencies>
Then, add the following plugin:-
<build>
<plugins>
<plugin>
<groupid>com.googlecode.mavennatives</groupid>
<artifactid>maven-nativedependencies-plugin</artifactid>
<version>0.0.7</version>
<executions>
<execution>
<id>unpacknatives</id>
<phase>generate-resources</phase>
<goals>
<goal>copy</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
This plugin searches for dependencies with natives-* classifier and unpacks the content to target/natives folder.
Testing
Run mvn clean package.
Inspect target/natives. The native libraries should be unpacked here:-
target/natives
├── META-INF
│ └── MANIFEST.MF
├── OpenAL32.dll
├── OpenAL64.dll
├── jinput-dx8.dll
├── jinput-dx8_64.dll
├── jinput-raw.dll
├── jinput-raw_64.dll
├── jinput-wintab.dll
├── libjinput-linux.so
├── libjinput-linux64.so
├── libjinput-osx.jnilib
├── liblwjgl.dylib
├── liblwjgl.so
├── liblwjgl64.so
├── libopenal.so
├── libopenal64.so
├── linux
│ ├── x86
│ │ └── libnative_synchronization.so
│ └── x86_64
│ └── libnative_synchronization.so
├── lwjgl.dll
├── lwjgl64.dll
├── macosx
│ └── libnative_synchronization.jnilib
├── openal.dylib
└── win32
├── x86
│ └── native_synchronization.dll
└── x86_64
└── native_synchronization.dll
Leave a Reply