【问题标题】:Eclipse 3.4 - external JARs with environment variablesEclipse 3.4 - 带有环境变量的外部 JAR
【发布时间】:2013-10-23 15:56:31
【问题描述】:

我正在为 Lotus Notes(Eclipse 3.4)开发一个插件,并且需要依赖外部 SDK/连接器来获取一些 Java 依赖项以及配置文件。

似乎为了正常运行,连接器安装文件夹中的文件必须位于类路径中。由于我不知道它安装在哪里,我必须依赖在安装期间设置的环境变量(“IBMCMROOT”),其中包含文件夹。

eclipse插件的classpath定义有没有办法使用windows环境变量?我试过在清单中使用变量:

Bundle-ClassPath: external:$IBMCMROOT$/lib/cmb81.jar,
 $IBMCMROOT$/lib/cmbsdk81.jar,
 $IBMCMROOT$/lib/db2jcc.jar,
 .,
 $IBMCMROOT$/lib/guava-15.0.jar,
 $IBMCMROOT$/lib/log4j-1.2.17.jar

这会导致 ClassNotFoundExceptions...

【问题讨论】:

    标签: java eclipse osgi classpath equinox


    【解决方案1】:

    不,Bundle-ClassPath 不是以这种方式使用的。它只能引用包本身的路径。

    要从未知位置的任意外部 JAR 文件加载类,您需要使用 URLClassLoader

    【讨论】:

    • 我不能。类不是问题,配置文件是问题。第三方库尝试从类路径加载配置文件。没有办法覆盖系统类加载器来帮助他们找到那些......
    • 然后您需要配置Lotus Notes 以将这些目录添加到系统类加载器中。 OSGi 包无法更改全局系统类路径。
    【解决方案2】:

    external: 是一种 Eclipse 容器主义。但我认为您需要在每个外部 jar 前面加上 external:。此外,IBMCMROOT 必须是系统属性(不是环境变量)。比如用-DIBMCMROOT=...启动java

    但是,我不会这样做。相反,将这些必要的 jar 放在类路径中并配置系统包以导出这些包,然后您可以从包中导入这些包。

    【讨论】:

    • 这是不可能的,因为 - 正如我在问题中所描述的 - 我必须参考连接器的本地安装。我无法在我的包中提供库,也不会硬编码在安装此连接器期间创建的配置文件的路径。
    • 我没有说要把连接器放在一个包里。我说过将连接器 jar 放在框架的类路径中并配置到框架以从系统包中导出连接器包。然后你需要使用连接器包的包将导入这些包。
    猜你喜欢
    • 2013-11-08
    • 1970-01-01
    • 2016-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多