关于maven,osgi和eclipse的困惑

时间:2014-01-22 18:14:36

标签: java maven osgi

我几个星期以来一直在处理maven和osgi,但仍然对依赖关系和bundle / packages / plug-ins感到困惑。主要是我无法理解它们是什么。因为我对java和osgi / maven都不熟悉,我很难想象它们是如何连接的,或者是另一个的一部分。所以不要太模糊,试着问一堆具体的问题。

1)据我所知,捆绑包和插件是相同的东西 - 只是不同的名称。包装也一样吗?我发现很多关于“我应该使用import-package还是require-bundle”这个主题的辩论,但在我理解包或包之前我无法理解它们。

2)Dependencys。例如,如果我想使用slf4j api,我添加此依赖项:

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.5</version>
    </dependency>

但这究竟意味着什么?我知道添加依赖项将使我可以使用slf4j。我可以假设依赖的“东西”只是一个编译项目(就像我在本地制作的那样)在maven存储库的某个地方吗?

3)Osgi捆绑。如果我以前的想法是正确的(依赖项就像项目一样)那么捆绑包就像项目下的包一样?如果是这样,那么我假设一个依赖项可能会增加添加多个osgi插件的可能性。如果是这样,那么我在哪里可以看到什么依赖使得可用的导入。我问这个是因为我注意到我在import-package下编写的名字在依赖项中并不总是相同的。

4)在eclipse中启动osgi配置时,我必须选择插件。有一些我可以从目标平台下选择,据我所知,我必须选择我在清单中导入的所有插件。什么是这个目标平台以及这些插件从何处到达?

这些很长(也许是非常愚蠢的问题),所以我非常感谢任何帮助。谢谢! :)

2 个答案:

答案 0 :(得分:2)

最重要的是要记住,Maven和OSGi的角色完全不同:

Maven是一个构建工具。它负责编译你的代码(使用javac编译器)并将结果汇​​总到磁盘上的bundle(jar文件)中......就是这样。 Maven不会运行您的代码。

OSGi是一个运行时模块化框架。它需要由Maven或任何其他构建系统构建的bundle文件,并为它们创建一个框架来运行.OSGi没有告诉你如何构建bundle,但它确实对它们的内容施加了一些约束,无论你使用什么构建工具都满意。

现在回答您的具体问题:

  1. “插件”是捆绑包的Eclipse术语。这是因为Eclipse在版本3之前使用了与OSGi不同的模块系统。现在它们是相同的。一个包不是一回事,它是一个Java包,就像你放在Java源文件顶部的包声明一样。通常,捆绑包将包含一个或多个包。

  2. Maven pom.xml中的依赖项意味着在编译代码时,指定的jar文件将对javac编译器可见。请记住,Maven是一个构建工具,因此这仅指定构建时依赖性。这是必需的,因为如果在Java源代码中使用符号,例如org.slf4j.Logger,那么javac编译器必须在类路径中找到该符号。否则,代码的编译将失败。

  3. OSGi包是构建过程的输出,也是运行时OSGi框架加载的物理模块。本质上,bundle只是一个jar文件,其META-INF/MANIFEST.MF中包含一些特定于OSGi的条目。因为它是一个文件,你可以保存它,移动它,将它部署到一个应用程序等.OSGi加载这个文件并创建一个封装bundle的内容的运行时模块。整个应用程序通常由许多捆绑包组成。

  4. 要运行OSGi应用程序,您必须告诉OSGi要包含哪些包。从您选择的捆绑包组合中,应用程序即将出现。目标平台是一种已构建的捆绑包存储库,它包括您自己编写的捆绑包以及第三方捆绑包,例如:库像slf4j等。使用Eclipse中的首选项对话框配置目标平台的内容。

答案 1 :(得分:1)

我建议你先分开学习。您可以单独使用Maven和OSGi。 OSGi有多个实现,Equinox是来自Eclipse的。

1 - OSGi有捆绑,Eclipse称它们为插件,所以是同样的事情。包是java pacakge。

2 - 依赖关系是一个maven概念。你可以在这里阅读:http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html

3 - bundle是一个OSGi工件。它基本上是一个带有特殊清单的jar文件。

4 - 启动时,您需要告诉OSGi您要加载哪些jar文件。特殊清单有指令告诉OSGi如何初始化你的应用程序。

希望有所帮助。