我们的一个插件需要安装JDK,而不仅仅是JRE。我们需要来自tools.jar的com.sun.javadoc和朋友。我不认为Sun的许可证会允许重新分发tools.jar(如果你已经有了JDK,这是不必要的。)
在Eclipse中似乎也没有办法将JDK指定为依赖项。 Eclipse新闻组中的所有答案都表明最终用户必须首先正确配置他们的Eclipse。
您是否知道任何解决方法可以使我们的插件用户明白这种依赖关系,只是使用Eclipse的依赖性机载机制?看起来这个包甚至对清单中的Import-Package
都不起作用,不像com.sun.jdi。
(作为解决方法,目前我们只能警告插件激活此库缺失。)
答案 0 :(得分:2)
由于eclipse提供OSGi环境,您可以参考文章“Exposing the boot classpath in OSGi”,并尝试使用:
通过指定所需的JDK包,OSGI框架将尝试加载它们(如果没有,则会失败)。
通过指定一个特定于JDK5或JDK6,您甚至可以确保正确的JDK版本。
OSGi规范允许Framework(通过其系统包)使用
org.osgi.framework.system.packages
属性将任何相关包从其父类加载器导出为系统包。
由于将主机JDK
重新打包为捆绑包不是一个可行的选项,因此可以使用此设置让系统捆绑包(或ID为0的捆绑包)自行导出这些包。 <登记/> 大多数OSGi实现已经使用此属性导出所有公共JDK包(基于检测到的JDK版本)。以下是来自Java 1.6的Equinox配置文件的片段:
org.osgi.framework.system.packages = \
javax.accessibility,\
javax.activity,\
javax.crypto,\
javax.crypto.interfaces,\
…
org.xml.sax.helpers
使用此属性,可以添加将由框架加载和提供的额外包,并且可以连接到其他包。
org.osgi.framework.system.packages = \
javax.accessibility,\
javax.activity,\
…
org.xml.sax.helpers, \
special.parent.package
注意:指定Bundle-RequiredExecutionEnvironment
的更简单的解决方案仅适用于JRE,而不是JDK ......
这种配置需要成为Equinox框架的config.ini的一部分(请参阅this example for Jetty及其config.ini)。 在您的情况下,它将在您的片段的config.ini中声明。