Eclipse 为什么可以';t MANIFEST.MF请参阅Maven';是波姆吗?

Eclipse 为什么可以';t MANIFEST.MF请参阅Maven';是波姆吗?,eclipse,maven,eclipse-plugin,osgi,equinox,Eclipse,Maven,Eclipse Plugin,Osgi,Equinox,所以我的POM中有这样的内容: org.jsoup jsoup 1.7.1 它从maven repo某处获取jsoup-1.7.1.jar,并将其放在我的maven Dependencies文件夹中 现在我可以在我的代码中使用它(Eclipse不会抱怨),但是当我试图在我的MANIFEST.MF文件中对它设置依赖时: Import-Package: org.osgi.framework, org.jsoup, org.jsoup.nodes Eclipse不断抱怨: No availabl

所以我的POM中有这样的内容:


org.jsoup
jsoup
1.7.1
它从maven repo某处获取
jsoup-1.7.1.jar
,并将其放在我的maven Dependencies文件夹中

现在我可以在我的代码中使用它(Eclipse不会抱怨),但是当我试图在我的
MANIFEST.MF
文件中对它设置依赖时:

Import-Package: org.osgi.framework, org.jsoup, org.jsoup.nodes
Eclipse不断抱怨:

No available bundle exports package 'org.jsoup.nodes'
No available bundle exports package 'org.jsoup'

有人能给我解释一下为什么会这样吗?(我对确定
MANIFEST.MF
看到什么的过程很好奇)

当您使用eclipse PDE时,您必须创建一个包含所有必要捆绑包的目标平台。正常依赖项解析与目标平台不耦合。因此,您必须将每个依赖项添加到maven pom和目标平台

顺便说一句,如果你正在从事基于服务器的OSGi项目,最好不要使用PDE。您还可以使用maven bundle插件创建bundle。它分析您所做的导入并自动创建清单。在大多数情况下,这比PDE manifest first way好得多,而且它在maven中工作得更好


请参阅:

只需在该软件包清单文件中添加一条导出语句,记住每次导入都应该有导出语句,谢谢,但我已经定义了一个目标平台,我不认为我需要将每个依赖项都添加到其中。。。但是想想看,这是有道理的。但是我仍然不明白为什么我的“插件”清单不能仅仅使用maven获取的jar中的interaces。这个“maven bundle”插件做了什么,使它能够工作?它不仅可以生成清单——因为我已经有了清单,但它不起作用。而且我刚刚意识到我不能将它真正放入目标平台,因为它没有更新站点或类似的东西。因此,我必须下载jar,将其放入目录中,然后将该目录放入我的目标运行时中。。。这会否定整个maven优势。只是想…基本上你有两个步骤。一个步骤是创建清单文件。这就是maven bundle插件可以提供帮助的地方。第二步是OSGi框架内的依赖项解析。在PDE中,eclipse使用目标平台来实现这一点。如果不使用PDE(如我的教程中所述),那么OSGi依赖项解析只在OSGi服务器中发生,就像我的ApacheKaraf一样。当然,这仍然意味着您必须在Karaf中提供所有依赖项,但Karaf可以使用maven依赖项,以便更好地匹配。@drozzy:如果您使用作为本地maven存储库代理,您可以使用使maven存储库中的所有内容也可以作为p2存储库使用。@BjörnPollex谢谢,但我在一家公司工作,我只需要免费的,没有许可证的工具。