将外部jar文件包含在Rhino shell中的资源路径中

时间:2013-06-13 08:42:52

标签: jar jna rhino

我在Rhino Shell上使用javascript。我需要将com.sun.jna.jar添加到类路径中。现在当我输入-js:> Packages.com.sun.jna.NativeLibrary [JavaClass com.sun.jna.NativeLibrary] 这表明犀牛壳可以访问jna库吗?但是当我尝试使用该库时:js:> var c = Packages.com.sun.jna.NativeLibrary.getInstance(“c”);

java.lang.UnsatisfiedLinkError:无法加载库'2':资源路径中找不到JNA本机支持(win32-x86 / 2.dll)(C:\ ti \ ccsv5 \ eclipse \ plugins / org) .eclipse.equinox.launcher_1.3.0.v20120522-1813.jar)

资源路径(C:\ ti \ ccsv5 ...... launcher_1.3.0.v20120522-1813.jar)是我输入时显示的路径 - js:>打印(System.getProperty( “java.class.path”));

我不知道如何将jar文件添加到资源路径。我尝试通过命令提示符执行: java -cp“jar的路径”。包含main的类的名称 - - >我如何理解包含main的类的名称是什么,因为Rhino从javascripts转换为类? 提前致谢。 Sohini。

1 个答案:

答案 0 :(得分:0)

我不相信这个问题与Rhino特别相关。相反,它是Linux和Windows系统库之间的区别。

JNA的入门文档,at https://github.com/twall/jna/blob/master/www/GettingStarted.md提供了以下示例:

package com.sun.jna.examples;

import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.Platform;

/** Simple example of JNA interface mapping and usage. */
public class HelloWorld {

    // This is the standard, stable way of mapping, which supports extensive
    // customization and mapping of Java to native types.

    public interface CLibrary extends Library {
        CLibrary INSTANCE = (CLibrary)
            Native.loadLibrary((Platform.isWindows() ? "msvcrt" : "c"),
                               CLibrary.class);

        void printf(String format, Object... args);
    }

    public static void main(String[] args) {
        CLibrary.INSTANCE.printf("Hello, World\n");
        for (int i=0;i < args.length;i++) {
            CLibrary.INSTANCE.printf("Argument %d: %s\n", i, args[i]);
        }
    }
}

加载的本机库取决于您运行该程序的平台:对于Windows,您需要使用&#39; msvcrt&#39; (Microsoft Visual C运行时)库;对于其他人,请使用&#39; c&#39;库。

我运行了一个测试用例来确认:

如果我尝试加载&#34; c&#34;则在Windows上运行失败库。

PS C:\Users\jharig\workspace\JNATest> java -cp ".\jna-3.5.2.jar;.\platform-3.5.2.jar;.\js.jar;.\js-14.jar" org.mozilla.javascript.tools.shell.Main
Rhino 1.7 release 4 2012 06 18
js> var c = Packages.com.sun.jna.NativeLibrary.getInstance("c");
Exception in thread "main" java.lang.UnsatisfiedLinkError: Unable to load library 'c': JNA native support (win32-amd64/c
.dll) not found in resource path (.\jna-3.5.2.jar;.\platform-3.5.2.jar;.\js.jar;.\js-14.jar)
        at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:220)
        at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:322)

如果我使用&#39; msvcrt&#39;那么在Windows上运行会成功库。

PS C:\Users\jharig\workspace\JNATest> java -cp ".\jna-3.5.2.jar;.\platform-3.5.2.jar;.\js.jar;.\js-14.jar" org.mozilla.javascript.tools.shell.Main
Rhino 1.7 release 4 2012 06 18
js> var c = Packages.com.sun.jna.NativeLibrary.getInstance("msvcrt");
js> var f = c.getFunction("printf");
js> f.invoke(["Hello World\n"]);
Hello World
js>