Eclipse:设置引用插件中包含的文件夹的环境变量

时间:2016-03-22 20:13:19

标签: java eclipse eclipse-plugin eclipse-rcp

我有一些Java代码包装现有的本机应用程序并执行以下操作:

  1. 从用户那里获得一些输入
  2. 执行本机应用程序,提供步骤1中输入的参数
  3. 对步骤2中生成的输出文件执行更多操作
  4. 步骤2中的本机应用程序需要一些动态库。因此,在运行配置下 - >环境我已设置以下变量来引用库。

    DYLD_LIBRARY_PATH = ${project_loc}/path/to/libs
    DYLD_FALLBACK_LIBRARY_PATH = ${project_loc}/path/to/libs
    

    到目前为止一切正常。现在我将我的代码和现有的本机应用程序打包为Eclipse插件。每当我尝试在插件中运行代码时,我都会收到以下错误:

    dyld: Library not loaded: libsrcml.dylib
    Referenced from: workspace/Project/src/nativeApp
    Reason: image not found 
    

    根据我的理解,这是因为我之前设置的环境变量引用了{$ project_loc},这是我的Eclipse项目的存储位置。现在,我的代码不再包含在该项目中,但它包含在插件中,因此变量的路径不再有效。问题是,如何设置引用插件中文件夹的路径?或者,是否有可能以某种方式在Java代码中动态加载这些变量?

1 个答案:

答案 0 :(得分:0)

path variables用于指定文件系统中的固定位置。

要识别插件中的资源,我会使用其URL

案例1 Bundle bundle = Platform.getBundle("your.bundle.id"); URL url = bundle.getEntry("yourDir/yourFile.txt"); File f = new File(FileLocator.resolve(url).toURI());

url = new URL("platform:/plugin/your.bundle.id/yourDir/yourFile.txt");
File f = new File(FileLocator.resolve(url).toURI());

案例2 :资源的平台网址:

System.loadLibrary("libname")

感谢Vogella提示。

但是,对于插件中的库来说有点不同,因为Eclipse-BundleShape: dir 必须能够解析你的lib。

如果您在插件中发布并使用本机库,请将您的插件打包为目录,而不是压缩的jar文件。 因此,请编辑插件的MANIFEST.MF并设置Eclipse-BundleShape: dir

System.getProperty("user.dir");

然后,您的插件将打包为一个文件夹,然后您有责任使您的Native库进行交互。通常这取决于本机库如何相互链接,以及Java-to-native框架如何设置搜索路径。

我的简单解决方案将所有本机库放到Eclipse可执行文件的根文件夹中,这是Java执行目录,这样我就可以使用"用户获取该路径.DIR"环境变量如下:

{{1}}

然后,当所有本机都在同一个文件夹中时,它们可以毫无问题地相互引用。

还查看这些资源: