Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么让我的项目成为OSGI包而不是标准的JAR包?_Java_Eclipse_Osgi - Fatal编程技术网

Java 为什么让我的项目成为OSGI包而不是标准的JAR包?

Java 为什么让我的项目成为OSGI包而不是标准的JAR包?,java,eclipse,osgi,Java,Eclipse,Osgi,出于什么原因,我想让我的项目成为一个OSGI包,而不仅仅是一个标准的JAR包?只有当它将被使用OSGI框架的应用程序(例如:Equinox/Eclipse)使用时,它才有意义吗?或者,从开发的角度来看,它是否也很有用,即:在Eclipse开发期间,其他项目能够轻松地重用我的OSGI捆绑包?如果您计划在OSGI上下文中使用它,那么您最好将其作为一个捆绑包。我不知道把它做成一个捆绑包有什么负面影响,但是如果你不把它做成一个捆绑包,然后发现你需要它,那么你可能不得不回去修复它。除此之外,我个人不知道除

出于什么原因,我想让我的项目成为一个OSGI包,而不仅仅是一个标准的JAR包?只有当它将被使用OSGI框架的应用程序(例如:Equinox/Eclipse)使用时,它才有意义吗?或者,从开发的角度来看,它是否也很有用,即:在Eclipse开发期间,其他项目能够轻松地重用我的OSGI捆绑包?

如果您计划在OSGI上下文中使用它,那么您最好将其作为一个捆绑包。我不知道把它做成一个捆绑包有什么负面影响,但是如果你不把它做成一个捆绑包,然后发现你需要它,那么你可能不得不回去修复它。除此之外,我个人不知道除了OSGi之外还有什么其他的东西使用清单元信息——但正如我所说;我认为这不会有什么坏处。

只有在您提到的OSGi容器中使用它时,这才有用

如果你正在搜索一个关于为什么它通常有用的答案,你可以通过谷歌搜索找到很多答案——从维基百科开始:

一般来说,我认为OSGi的主要好处是封装/版本控制、解决JAR地狱和框架提供的管理,这取决于您的项目,您可能会感兴趣,也可能不会感兴趣

如果你还没有读过OSGi,我肯定会建议你读一读,这是一项非常有趣的技术。我建议阅读尼尔·巴特利特(Neil Bartlett)关于EclipseZone的文章——这是第一篇:

有很多,所以谷歌-他们非常有趣的阅读,这也将给你一个想法,这是否是你应该考虑的东西。 SpringSource是OSGi的主要支持者,因此也值得一看:


    • OSGi提供对模块的支持,您可以控制依赖关系。每个模块可能包括和排除其他捆绑包中的包。您还可以在运行时替换捆绑包。将整个项目作为单个捆绑包并没有这些好处。如果jar不能作为OSGi捆绑包使用,我只会像jdbc驱动程序一样将其打包为捆绑包。
      首先检查你的项目是否会有好处。然后确定哪些模块应该是捆绑包

      如果您的项目是一个公共或开源库,那么请将其作为OSGi包。这将对希望使用您的库的OSGi开发人员有很大帮助

      另一方面,如果你的图书馆是私人的,那么OSGiffing的好处是有限的。如果您以后决定战略性地采用OSGi,这将是一个优势。您还可以从显式依赖关系中获得一些好处,即,您可以查看捆绑包以准确了解它所依赖的内容

      这样做没有运行时成本。清单中的OSGi数据被非OSGi运行时忽略


      但是,作为构建步骤的一部分,您必须生成OSGi清单。最好的工具是Bnd,它可以很容易地集成到任何ANT构建中——用它来替代“JAR”任务。如果您是使用Maven构建的,那么就使用Maven Bundle插件(它在内部使用Bnd)。

      OSGIfying项目将允许OSGI用于Eclipse中的依赖关系管理,而不是标准的Eclipse项目构建机制,或外部依赖关系管理工具,如Ivy或Maven。将一个项目放入一个OSGI捆绑包中,可以将该项目的包依赖关系表示为捆绑包依赖关系(如果包依赖关系存在捆绑包),该依赖关系将由OSGI框架而不是那些其他机制(标准Eclipse project build/Ivy/Maven)来处理

      标准Eclipse项目依赖关系是通过在项目的构建路径上指定其他项目和库来建立的。转换为OSGI将用MANIFEST.MF导入包或所需的包声明替换构建路径引用

      与标准eclipse机制相比,使用OSGI进行依赖关系管理的优点是:

      • 重新导出依赖项:捆绑包可以重新导出其依赖包,这意味着依赖于捆绑包的代码也不必依赖于捆绑包的依赖项(如果它也使用它们)
      • 版本管理:因此您可以指定依赖项的最小和最大预期版本

      另请参见

      您应该将其打包为“bundle”还是仅仅拥有一个包含清单文件的“jar”?非OSGI开发人员可能更喜欢jar而不是捆绑包。为什么?捆绑是一个罐子。是的,你是对的,我认为在nexus中包装应该是“捆绑”,但它不是。太好了。我知道Maven和Nexus有时喜欢假装bundle不是JAR。。。这并没有改变一个事实,即在物理上,bundle始终是一个JAR。是的,唯一的区别是META-INF/manifest.mf,其中包含更多的信息,对于不在OSGI环境中的人来说,这些信息将被忽略。我想现在,所有Apache项目都是OSGI化的,然后他们会像你建议的那样发布捆绑包。