gpt4 book ai didi

java - 关于maven、osgi和eclipse的困惑

转载 作者:行者123 更新时间:2023-12-01 23:15:25 24 4
gpt4 key购买 nike

我已经处理 Maven 和 osgi 几个星期了,但仍然对依赖项和 bundle /包/插件感到困惑。主要是我无法理解它们是什么。因为我对 java 和 osgi/maven 都很陌生,所以我很难想象它们是如何连接的或者它们是对方的一部分。因此,不要太含糊,我会尝试提出一系列具体问题。

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

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

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

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

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

4) 在 eclipse 中启动 osgi 配置时,我必须选择插件。我可以从目标平台下选择一些插件,据我了解,我必须选择在 list 中导入的所有插件。这个目标平台是什么?这些插件是从哪里来的?

这些很长(而且可能是非常愚蠢的问题),所以我真的很感谢任何帮助。谢谢! :)

最佳答案

要记住的最重要的事情是 Maven 和 OSGi 具有完全不同的角色:

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

OSGi 是一个运行时模块化框架。它需要由 Maven 或任何其他构建系统构建的 bundle 文件,并创建一个供它们运行的​​框架。OSGi 不会告诉您如何构建 bundle ,但它确实对其内容施加了一些约束,这些约束必须无论您使用什么构建工具,都会感到满意。

现在回答您的具体问题:

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

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

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

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

关于java - 关于maven、osgi和eclipse的困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21290739/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com