Exporting to Runnable jar with extra native code libraries in eclipse

15,076

Solution 1

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.

Solution 2

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.

Solution 3

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.

Share:
15,076
Julio Diaz
Author by

Julio Diaz

Bioinformatician wannabe at UofT

Updated on June 19, 2022

Comments

  • Julio Diaz
    Julio Diaz almost 2 years

    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

  • Julio Diaz
    Julio Diaz over 12 years
    I have tried that but it doesnt work, remember that the native libraries for the external package is in a folder and the java.library.path need to have access to it.
  • ChrisJ
    ChrisJ over 12 years
    You're right, as far as I know, Java cannot load JNI libraries (.dll, .so, etc.) from a JAR file. The solutions you mention extract the relevant files at runtime, so that Java can load them.