从JAR文件外部加载资源文件

时间:2015-05-10 13:55:30

标签: java maven jar shared-libraries

使用maven我正在构建一个必须动态加载驱动程序的应用程序。使用以下代码时,仅当driver.so位于生成的 JAR 文件时才有效。我该怎么做才能在路径./natives/driver.so内找到 JAR 之外的文件。

package com.myproject;

public class Starter {
    public static void main(String[] args) {
        File classpathRoot = new File(Starter.class.getClassLoader().getResource("driver.so").getPath());
        System.out.println(classpathRoot);
    }
}

当驱动程序位于 JAR 时输出:

jar:file:/home/ted/java/myproject/target/myproject-0.1-SNAPSHOT.jar!/libgdx64.so

位于外部 JAR (位于target以及target/natives目录中)时的输出是:

null

我通过以下方式启动应用程序:

cd /home/ted/java/myproject/target/
java -Djava.library.path=./natives -cp myproject-0.1-SNAPSHOT.jar com.myproject.Starter

我该怎么办?

1 个答案:

答案 0 :(得分:0)

试试这个:

package com.myproject;

public class Starter {
    public static void main(String[] args) {
        File file = new File("natives/driver.so");
        System.out.println(file);
    }
}

或者这个:

package com.myproject;

public class Starter {
    public static void main(String[] args) {
        File file = new File(System.getProperty("java.library.path"), "driver.so");
        System.out.println(file);
    }
}