Exporting to Runnable jar with extra native code libraries in eclipse

15.2k views Asked by At

I am having trouble exporting my java project from eclipse as a jar executable file. My java project uses an external library (its called jri). I have exported the jri.jar file and set the library path for its native library in eclipse, and it works great in development in eclipse. However, when I export it as an executable jar file I get the following error:

Cannot find JRI native library!
Please make sure that the JRI native library is in a directory listed in java.library.path.

I have placed a folder called lib in the same directory as my project's jar; this lib folder contains jri's native library. jri's native library is not in one file but in a folder. This is the same setup I have in eclipse.

The way I am exporting my project in eclipse is

Export...
Java > Runnable JAR file
Copy required libraries into a sub folder next to the generated Jar
Finish

And my folder is organized like this

folder project
  project.jar
  project_lib
    jri.jar
    jri native library folder  

The MANIFEST.MF of my project.jar is:

Manifest-Version: 1.0
Class-Path: . project_lib/jri.jar
Main-Class: index

What I want to achieve is to give another person a folder including project.jar and anything else needed so she/he can run it without needing to install anything else. Thanks so much

4

There are 4 answers

0
Ortwin Angermeier On BEST ANSWER

Add a script containing something like that:

#!/bin/bash
java -Djava.library.path=project_lib/native/ -jar project_lib/jri.jar

I export some java projects that way.

1
falsarella On

You can put the libraries inside your jar:

Export...

Java > Runnable JAR file

Package required libraries into generated Jar

Finish

I always export this way. I don't know if it will work in your case, but worth a try.


Edit:

See these links:

My guess is that this have something to do with LD_LIBRARY_PATH not correctly been set. Or the file wich it is searching for isn't in the path listed.

1
Lucas Brutschy On

This is relatively hard to implement. The solutions I have seen involve extracting the native libraries in the JAR to an OS temp directory and then loading it. I would go for an integrated solution for that. One Jar and Java Class Loader support it, and on the second page you will find links to similar tools.

0
Dmytro Melnychuk On

You know I had the similar problems

Could not extract native JNI library.

all above proposes can't help me. I couldn't stop and start gradle deamon by using follow command:

gradle --stop

I saw that gradle deamon still not stopped in my processes. That's why I kill it in my process and all will be fine :)